Print

Print


Folks,

I feel pretty diffident chiming in in a discussion which doesn't  
directly affect me, and in any case most of what I would say has been  
said by others here.  The following are therefore fairly disconnected  
observations, connected with one or other message in this thread, and  
not meant to persuade one way or another.



I now use hg repositories for code and text that I don't intend to  
share, but do want to snapshot regularly: it means I can note in my  
logbook that 'version X does actually work', and be able to  
reconstruct that fairly painlessly.

It struck me that DVCS systems represent an alternative evolution of  
RCS.  CVS and SVN developed RCS by allowing multiple users to access  
the same RCS repository (literally in early CVS, but with the same  
model in SVN).  DVCS takes the alternative route of going back to the  
RCS model of private repositories, but making it easier for different  
such repositories to be synchronised.  I suspect that this is, in  
retrospect, a better overall evolution of RCS.

The cost, as others have noted, is that there isn't some master  
repository for the code as there is for CVS and SVN.  I get round that  
by having my private hg repositories be clones of repositories on a  
group server which is carefully backed up by others, but there are  
clearly other ways this can be handled, which don't necessarily have  
to involve more elaborate laptop backups.

I like being able to make frequent commits of code which is working,  
but still isn't in a state I'd much want anyone else to look at.  I  
don't myself feel this is a particularly strong point, but this does  
usefully emphasise that committing != sharing, necessarily.

I'm not an enthusiastic brancher (though I admit I may well be missing  
a trick here), so can't add anything there.

In the project where we were forced to use hg (or git) we've ended up  
imitating the structure of a SVN repository, more or less, in the  
sense that there's effectively a master repository and checkouts (all  
hg clones are equal, but some are more equal than others).  This may  
or may not be missing the point, but if nothing else indicates that hg  
is potentially a better svn than svn.

I do occasionally find hg histories a bit confusing.  The fact that  
there isn't a single master repository means that you do end up  
merging more often, since updating after someone else has pushed to  
the 'main' repository means that, logically, you have to merge their  
changes into your (local) repository.  That has worked completely  
painlessly so far, and the increased amount of merging is simply an  
innocuous consequence of the different logic of a DVCS (I think my  
nervousness was because merging operations in CVS/SVN were usually  
associated with pain of some sort or other), but I have occasionally  
had puzzles of the 'why am I being asked to merge this?' variety,  
which probaby arise from naivety on my part.

In that sort of context, remarks like Tim's "(although you would  
"rebase" before merging to master to linearise the commit history)"  
just make git smell even more confusing, for me.  The fact that Tim's  
URL <http://www.gnome.org/~newren/eg/> lists _several_ attempts to  
provide easy wrappers for git just confirms all my impressions of git  
(though I do confess that I haven't been systematic about looking at  
git vs hg, so this is just at the level of impressions).  I do try  
hard not to be influenced by the git name, nor by Torvalds' efforts at  
promoting it -- never watch his Google tech talk on git.

The git cheat-sheet is at <http://git.or.cz/gitwiki/GitCheatSheet>,  
the Mercurial one (which the Git one imitates) is at <http://www.ivy.fr/mercurial/ref/v1.0/Mercurial-Usage-v1.0.pdf 
 >.

See you,

Norman


-- 
Norman Gray  :  http://nxg.me.uk
Dept Physics and Astronomy, University of Leicester