Comparison with Git, Mercurial or Darcs?

Mark Williamson maw48 at cantab.net
Wed Nov 4 03:02:59 GMT 2009


<snipped content>

> One correction from your list: Darcs does support renames properly. I
> was surprised when I learned that Git and Mercurial have to do a
> delete+add behind the scenes... Ugh...

FWIW, Mercurial does record renames, whereas git does not record them at all.

Cheers,
Mark

> > * It respects the recorded history of changes: When I make a change and
> >  commit it, later changes don't threaten to alter or remove my change
> >  from the ancestry. Changing history is possible, but is exceptional;
> >  nothing like as common as ‘darcs amend’ or ‘darcs obliterate’ etc.
> 
> Ok. I guess I see your point about "darcs amend". But "obliterate" is
> just "unrecord and revert", which bzr can do too. Perhaps you refer to
> the fact that if I add features A, then B, then C, I can remove
> feature A, so your history would change. I actually like this feature.
> 
> >  On the other hand, “oops” moments are easy to undo (‘bzr uncommit’).
> 
> I like that about bzr. The way I currently use darcs I actually use
> that a lot. While I'm working on a new feature I enter a lot of
> patches called "test", so I can push the changes to the test server.
> When I'm satisfied with the work, I unrecord all the changes and then
> re-record them into a nice set of patches.
> 
> > * It has a simple way to put some changes aside (‘bzr shelve’) while
> >  committing the rest,
> 
> I like that too. It helps compensate for not having the
> history-altering, cherry pick feature of Darcs.
> 
> > and it's easy to bring uncommitted changes from
> >  one branch to another, if while working on the change there I decide
> >  they make more sense here (‘bzr merge --uncommitted $OTHERBRANCH/’).
> 
> That is very interesting. I didn't know that. Does it work for things
> you put on the "shelf"? Can I use this to push uncommitted changes to
> my test server?
> 
> > * Bundling a set of changes together, or publishing a branch, is a
> >  meaningful operation for the recipient: the aggregate effect of a set
> >  of changes can, if desired, be examined just as easily as it were a
> >  single change, rather than defaulting to see each individual change.
> >
> >  (It is the lack of this feature, IME, that leads Darcs users to use
> >  ‘darcs amend’ so often, losing the existing detail and history of each
> >  individual change.)
> 
> I don't think that's correct. In Darcs, a patch is either a primitive
> patch, or a composition of patches. If you have patches A,B,C you can
> treat their composition as a single patch. I can't say more because
> I've never had to do this (I'm a solo developer).
> 
> > * Bazaar presents the ancestry of changes as UI: the natural way to talk
> >  about changes is by their revision number in the ancestry, and a range
> >  of revisions as they occurred in the branch (all commands talking
> >  about revisions allow the same range-of-revisions specifier).
> 
> Are revision numbers a hash or are they sequential? If they revisions
> are universal, I imagine they would have to be a hash, like with
> Monotone.
> 
> > * Shared repositories are implemented well (and soon to be the default
> >  in later Bazaar versions), and many Bazaar operations make it easy to
> >  manage a collection of related branches in a repository; but none of
> >  it is required.
> 
> Are shared repositories mainly to improve speed and space?
> 
> > * It allows for many different styles of workflow, smoothly and
> >  compatibly and decided when necessary, not locked-in up front.
> >
> > * Especially, it allows for a centralised workflow when desired (‘bzr
> >  checkout’ or ‘bzr bind’) without administrative overhead, and without
> >  harming distributed operation.
> 
> I must be confused, but I would have thought that any distributed VCS
> can act like a centralized VCS if you choose to use it that way.
> 
> > * Rename is a first-class operation, tracked like any other change and
> >  maintaining consistent history of the file. This is a significant
> >  lessening of tedium and worry, allowing for how filesystem entries
> >  change over the course of working on a project.
> 
> As I mentioned earlier, Darcs does this. I was surprised that other
> VCS tools do not. I expected all modern VCS tools to correctly
> represent my intentions.
> 
> > * Directories — even empty ones — are first-class citizens of the
> >  inventory, tracked like any other entry. Also lowers tedium, and
> >  another example of Bazaar allowing for how people actually work with
> >  files in a project.
> 
> Ditto for Darcs. And again, I was surprised when I learned that other
> VCS tools don't do that.
> 
> > * The interface is far smoother and more consistent: it uses readline
> >  for command-line input, it handles Unicode properly, common options
> >  are sensible between commands, interfaces to external tools are done
> >  well, etc.
> 
> Ok.
> 
> > * It integrates well with workflow tools. Loggerhead is a good web
> >  interface to branches, Emacs VC mode supports Bazaar branches, Bazaar
> >  can use just about any sensible diff/merge tool, and I hear users of
> >  other workflow tools have similar happy stories.
> 
> Ok. Thanks for the info.
> 
> > I'm sure with more time I would think of other advantages. That should
> > give you a taste, anyway.
> 
> Thanks. It was very informative and I learned several things I didn't
> know before.
> 



More information about the bazaar mailing list