Distributed version control systems (DVCS) are all the range right now in the geek community. It has been just over 5 years since Matt Mackall announced Mercurial to the world, and about the same since Linus Torvalds announced Git. In the interveening years, both have sprung up to be worthy competitors to one another, and more importantly, viable replacements for the historical centralized version control systems, and really, anything that quickens the death of ClearCase and CVSgets my vote.
What worries me is that there’s so many “flame wars” between the opposing camps. At PyCon 2010, there was a great talk by Scott Chacon of GitHub entitled “Hg and Git : Can’t we all just get along?”. The summary mirrors my views:
There is a fair amount of unnecessary animosity between developers about version control systems, especially between Mercurial and Git users. In reality, these two systems are very similar and can actually cooperate pretty well.
Git and Mercurial are more alike than different. Rather than argue about the nuances of DVCS, let’s focus our energy on destroy — once and for all time — CVS and ClearCase. Subversion is at least functional, but it too could go. Before we can do this, though, there’s one thing that has to be solved somehow, although I’m afraid it is a philosophical problem with DVCS: large file support. While there’s some effort to fix the problem in both Git and in Mercurial, the reality is the problem is a difficult one when one of the core foundations of DVCS is that your “checkout” is really a “clone” of the entire repository. This is how it is able to make a lot of things possible, or at least fast enough to be useful. So, how do you deal with the version control of large (> 10MB) files. These are more common than you think. One project I work on has, quite literally, hundreds of these files with extracts of other systems that are expensive to perform, but which form a dependency that needs to be tracked. For now, we keep those in Subversion and the rest in Mercurial.
Finally, I think the real competition between Git and Mercurial is better viewed as the difference between GitHub and Bitbucket. The real story is how these two sites have changed the interaction model among developers in open source projects. While GitHub currently “leads” in adoption, with over 833,000 repositories (versus who knows how many on Bitbucket), the competition is exceptionally important to drive further advances. These sites, and others like them, are where the rubber hits the road on changing developmental processes. So whether you use Mercurial or Git, or even Bzr, remember that collaboration is where the real innovation is happening. The change in organizational interactions is what really brings the benefit, the rest are just tools.
No Trackbacks
2 Comments
I must have missed something: where are all these git/hg holy wars happening? Cause I’m missing out! I know there has been some trash talking here and there, but I don’t see any giant war going on, at least not at the “holy” level of emacs vs. vi, or linux vs minix.
Perhaps it’s not an all-out “war” in the vein of vi v. emacs (emacs is, of course, the winner), but instead a holy kerfuffle.