Distributed Versioning – The new wheel

With all of the great distributed versioning tools out there it’s a wonder everyone is still using traditional client-server versioning systems like SVN or CVS. Especially when you consider how trivial distributed systems are to setup for small projects. Unless your hosting your SVN project with some one like Sourceforge, LaunchPad or Google Code, it is much easier with a system that doesn’t require you to setup a central repository. I know… “If it ain’t broke don’t fix it.”, but sometimes you don’t realize how broke something is until you’ve used something that’s… less broke.

I’ve spent some time looking at several open-source distributed SCMs and the most prominent one’s from my point of view are the following:

Each of the above SCMs are production ready distributed systems and have notable projects under their belts, but each one has properties that suit certain projects better than others, so I recommend doing some reasearch on your own because what works for me may not meet your needs.

I typically work in a unix like environment from the command line, but I also collaborate with people who do not, therefore I tend to shy away from solutions that don’t function well on all platforms. For me this eliminated Darcs and Git from the start. Although both of the aforementioned SCM systems are feature rich and technically strong, their windows support is pretty dismal compared to the other competitors on the list.

So for me the most appealing options are Bazaar (bzr) and Mercurial (hg). Both of these projects have strikingly similar offerings. The both have clients/plugins for Eclipse, Windows Explorer (Tortise__), and Trac. Both systems are written in Python and have a dependency on the Python libraries, but it is relatively easy to find binary installers for Python, Bazaar and Mercurial so if Python isn’t your thing, (Hard to imagine) it doesn’t really matter. Bazaar is used heavily by the company behind Ubuntu (Canonical) who is also responsible for Launchpad. Mercurial is used by several big-name projects such as Mozilla and OpenJDK. I’ve used both Bazaar and Mercurial for some small projects and for me Mercurial really stood out.

For anyone looking for a distributed SVN replacement, I definitely recommend giving Mercurial a shot. Since they’ve updated their logo there’s no reason not to! Seriously though, Mercurial was an extremely painless transition for me. The user interface was extremely familiar and intuitive, has clients available for just about everything and was extremely painless to install and use. The fact that it just felt familiar coming from SVN to me and it is noticeably faster for most tasks than Bazaar put it at the top of my list.