On May 11, 2016, at 4:24 PM, Marko Käning <sec001+fos...@posteo.net> wrote:
> 
> Is this deliberately missing functionality following fossil's mission to keep 
> all history?

I suspect it’s more likely the case that fossil private branches are a subset 
of the functionality of regular branches, and we’re philosophically opposed to 
adding such a feature for the regular checkin mechanism.

Keep in mind also that Fossil does 1-step commits by default.  That is, fossil 
autosync is on, so there is no separate push step.  We don’t talk about staging 
areas and such in Fossil.  The normal pattern is that all work is public, by 
default.

This avoids the “guy in the room” problem first documented by Gerald Weinberg 
in his influential 1971 book “The Psychology of Computer Programming,” where a 
perfectionist developer spends weeks secretly working on changes without 
talking to anyone about what they’re doing.  Then, boom, a big bolus of changes 
lands all at once, potentially screwing up other developers’ work.

The Fossil alternative is to make risky changes on a public branch so your 
coworkers/collaborators can see what you’re doing, and thus potentially save 
you both a lot of time and hassle if they see you committing questionable code. 
 Or at the least, it lets those same people see what you’re doing, agree that 
it’s a good direction, and make sure they’re ready when your code is finally 
merged back in.

This plays into another key bit of advice in Weinberg’s book: practice egoless 
programming.  You are not your code.  Yes, working on public branches means you 
might end up being foolish in public.  But, it also means your foolishness can 
be corrected quickly, before it causes a lot of damage.

As long as your coworkers and bosses understand that you might not be perfect, 
and that everyone makes mistakes, and that everyone can and should learn from 
them, this is not a problem.

The wish to commit only perfected features publicly is usually either a sign of 
egotism, arrogance, or a culture that punishes people for being imperfect.  
Regardless of the actual cause, it’s a social problem, not a technical problem. 
 Seeking technical workarounds for social problems merely avoids solving the 
actual problem.

That only good reason for private branches is when you have a public repo and 
you need to develop some code that simply cannot be public, such as for some 
legal reason.  For example, one of the SQLite developers might be contracted to 
write a feature or fix for one specific company, and that company doesn’t want 
the change to go back into SQLite.  This is not a common case, so I don’t see 
that a lot of developer time should go into supporting it.

Private branches should be unpleasant to use to discourage that use. :)

> No plans to implement a (perhaps restricted) squash command which would only
> work on private branches?

I think the trick would be to write such code that works on all branches, but 
then somehow prevent it from being used on anything but private branches.  
Sounds like a disaster waiting to happen.
_______________________________________________
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to