There was never any question that I was going to use a version control system for this year’s development work. The question is, which one?
Obviously, CVS is out. I’d rather use plain old RCS. Xcode does have nice Subversion integration, and Apple’s development tools are pretty good at working around its precious .svn litter. However, with a lot of development work happening on my laptop now, the server ball-and-chain is very unappealing. (Not to mention that in lieu of a real backup plan, my server was getting powered down and hidden just about every time we left our rental unattended.) Even some of Subversion’s own developers have bravely and frankly admitted that Subversion is not the future of version control, at least not for developers who have any choice in the matter.
After playing around with a couple of the modern alternatives, I’ve definitely caught the Distributed Version Control bug myself. Other folks have explained DVCS better, and given a number of reasons [pdf] for it. I’m addicted for two simple reasons: it’s light, and it works offline. Making a repository is as burdenless as creating a directory, and I don’t need to be at home for the utilities to work.
The question remains: which utility? I quickly narrowed my choice down to Bazaar and Mercurial, but was then at an impasse. (Git was out from the get-go. There are some brilliant minds behind it, but that’s also a shortcoming. I’ve got better things to do than comprehend the brainchild of hard-core Linux hackers, and they apparently have better things to do than support their mess on the other two major operating systems.)
Mercurial has some cool features which I don’t claim to fully understand, like the Mercurial Queues patch management system. There’s a few things that seem strange (like the CVSesque lack of versioned directories) but in practice things like don’t usually come up. I know of at least one other Mac developer who chose Mercurial over Bazaar. I like Bazaar’s clean command line and its clean website, and how it rarely needs me to fiddle with its configuration files. I’ve joined the #bzr chat on IRC a couple of times, and the folks there are friendly, helpful and focused.
I had told myself originally that I would just use Mercurial, but in the course of playing with them both I ended up accidentally using Bazaar for my original prototype. As I was liking Bazaar anyway, I decided to stick with it for code and have been happily using it for months now. I did start using Mercurial for something else lately, and found myself annoyed at all the manual configuration file tweaking it made me do versus Bazaar, and in the process was reminded how much less polished going to the Mercurial site for documentation feels.
If you’re having trouble choosing between Bazaar and Mercurial, the best advice I have is a coin. You can even bias it before flipping! Overall, they are both excellent choices for a developer who mostly wants to code. To be honest, that’s kind of a shame. It seems like Mercurial has hit a sweet spot for developers who know better than to try reconfiguring their minds for enjoyment of the heroic git, yet do want something they get to wrestle with a little. I’m happy for the Mercurial team, but would hate for what Bazaar represents to lose out.
As a Bazaar fan, I really enjoy its usability and polish, yet I so often see “Mercurial or git” as if they were the two options from Subversion. It feels like I’m the underdog with a Macintosh in the 1990s, hearing someone say that they’re “deciding between Windows or Linux”. I do have confidence that even if Bazaar doesn’t have an “OS X” in its future, it is popular enough that I will be able to migrate should the need arise. The Bazaar and Mercurial teams are on good terms, perhaps they will eventually find a way to pool their mindshare against the lead dog. Until then, it looks to be an interesting race!