Ian Bicking: the old part of his blog

Re: Distributed vs. Centralized Version Control

Have you checked out <a href="http://www.selenic.com/mercurial/">Mercurial</a>? I wrote a short post about it recently.

Comment on Distributed vs. Centralized Version Control
by Julian


I'll have to throw my approval in on this one as well. I have been using GNU Arch for some time now, and although it is a powerful SCM, it's definitely not the easiest thing to use. Bazaar has addressed some of these issues while remaining compatible with GNU Arch. Tom Lord has pre-released GNU Arch 2.0, which is another complete rewrite that borrows ideas from Linus' Git. It's not a feature-complete SCM yet, but it appears to be picking up steam. Hopefully, he'll incoporate the usibility features in Bazaar into the new version.

I have not jumped on the Subversion bandwagon, partially because it had such a rocky start right about the time I was looking for a new SCM. I have it installed, but only to pull your source code, at which point I slough it off to whatever SCM I might be playing with at the time.

I have not used monotone because of its dependence upon OpenSSL libraries and the inability to incorporate GPG/OpenPGP utilities (though that's such a little nit that I should probably reconsider). I'm also not entirely comfortable with having to cut-n-paste SHA-1 strings just to get a branch I want. (Git suffers from this, too.) Mercurial incorporates a versioned tagging system that allows you to set arbitrary names to revisions and travels with the archive. You can also set local tags that do not get transfered, which allows you to make less "official" notes about what a branch or revision represents. +1 for Mercurial.

Codeville has some interesting merging algorithms, but ease of use is by far the more important thing to consider. Darcs has gotten some bad press regarding its memory consumption and long operations when merging with large histories, though these might be fixed by now. (Plus, it's written in Haskell!? Who uses that?!) Canonical is sponsoring the development of Bazaar-ng, another python-based SCM that borrows ideas from GNU Arch and Bazaar. I don't really know where it is in a feature-wise comparison, but it's a relatively new project. Now that GNU Arch 2.0 is in alpha, I'm not sure if bazaar-ng is going to take the new direction (I haven't been following that closely lately).

That brings us back to Mercurial. It's a mouthful to say, but the commandline is a terse hg COMMAND style. It's very cvs-like in the way it feels, yet shares a lot of properties with monotone and codeville. It is self-hosting and can publish over HTTP. A CGI front-end is provided so you can incoporate it with your favorite web server. The CGI/web front-end looks a lot like gitweb, the Perl git front-end on kernel.org, though there have been recent patches to the list that really improve on the presentation. Plus, it's FAST! (And written in Python, non-the-less.)

# Chad Walstrom

Hi; yes, I actually saw that on del.icio.us, and it's what got me thinking about version control again.

It sounds like the developer on Mercurial has the technical parts down well. I don't know about usability, especially since it seems like it's a contender for Linux development, and I think Linux developers (or maybe just Linus) have distorted ideas about usable version control.

I don't know what the technical foundation of Bazaar-NG is, but they seem the most concerned with basic usability issues. Other ones can be better or worse in terms of usability -- Arch is pretty horrible from what I can tell, and Darcs is pretty straight-forward. Many of them put so much emphasis on the distributed part, that continuous integrating (the norm in Subversion or CVS) is an Excersize Left Up To The Reader.

It is interesting that this latest generation of version control systems is very heavy on Python (Mercurial, Bazaar-NG, Codeville, and I think I'm forgetting something else...)

# Ian Bicking

From a usability perspective, Mercurial is quite similar to both CVS and SVN. Commands that "mean the same" in CVS and Mercurial have the same names, flags, and so on.

Linus definitely has extremely peculiar notions about version control, but those are all firewalled in git/cogito, and have not bled elsewhere.

# Bryan O'Sullivan