There’s been a lot of noise in the development community over the last year or so about DVCS. Being highly opinionated myself, I can’t help but take a minute to share my own thoughts on the matter.
Let me start by first of all saying: Yes, it’s true. Distributed Version Control Systems really are everything that Centralized Version Control Systems (read: SVN/CVS) fall short on. However, having been a long-time Subversion user myself, as well as the fact that I hardly ever work on a team with more than a couple of other developers, it took a lot of noise to make me even care about the differences between DVCS and CVCS. So what is the difference you might ask? Almost everything; and that’s a good thing! (ok, that’s a slight exaggeration, but the benefits are so profound it almost feels that way)
Don’t worry, I’ll spare you the repetition of what has already been said elsewhere. My story is this: I spent about a month looking at the various DVCS’ and eventually narrowed it down to Git vs Mercurial (why anyone would use Bazaar over Mercurial is beyond me). Since I’m a Linux user, and since Github impressed me, I finally decided to go with Git on the next project that came my way. Boy oh boy do I wish I had run across this article beforehand…
As the referenced article implies, Git does anything and everything you’d ever need it to do. Now, as a Linux guy I typically like the options I’m given with the “everything plus the kitchen sink” approach. However, I quickly found myself using 2 or 3 commands to do something I swear everyone must do and really should be only one command. Then there’s all the command options you have to throw in to make the command do exactly what you want it to do. This quickly became tiresome and once that project was over I decided to give Mercurial a try, hoping it would be much kinder to me.
The first thing I realized when using Mercurial on a “real” project was that it seemed to think the same way I did (an interesting trend I’ve noticed with Python programs). Whereas with Git I found myself typing “git help <command>” over and over again, I hardly ever needed to look up any special options with the Mercurial commands. Another thing I soon realized was that a lot of the negative press that I’d read on Mercurial was actually written up about the 1.0 version (or earlier). I was pleased to find that much of these “issues” no longer existed in my 1.2.x version of the tool.
I now run almost all of my new projects on Mercurial. I say “almost all” because there are a few cases where the project is small and a tool I’m using in the project already has a Git repository so it makes sense to keep everything streamlined. However, with new tools like hg-git, even that may become a thing of the past.
In conclusion, I strongly encourage you to check out Mercurial if you’re jumping in to the DVCS game. Unless you’re a huge project like the Linux kernel, you probably won’t ever need the “advanced functionality” that Git puts at your fingertips (which is probably in most cases also available in Mercurial, just not right in your face). If you’re still using SVN (or even, *gasp*, CVS), then why not get with the times? Mercurial has some amazing conversion options that will retain your history and make the switch a piece of cake. Sure, there are a few new concepts to learn (pull/push and the distributed nature), but it’s only a minor learning curve that will pay off immensely.
Links of interest:
- Bitbucket – Mercurial’s version of Github
- WikiPedia’s article on DVCS
- Intro to Distributed Versioning Control – An excellent read
- “While git has many fans, it also provokes strong antipathies.” – Guido van Rossum
- “Subversion is the most pointless project ever started.” – Linus Torvalds