Meta Review of Mercurial Distributed Version Control System

By Angsuman Chakraborty, Gaea News Network
Wednesday, May 2, 2007

I was recently introduced to Mercurial, a new distributed version control system people are talking about. Version control systems are central to any development team and a choice shouldn’t be made lightly as you will often find your development process limited by the limitations of the system. We use Subversion, a decision I made after long exposure to it and making myself fully confortable with the system and finding a way around its limitations. I haven’t done a similar exploration with Mercurial yet. However as I am always interested in improving my process, I briefly looked into Mercurial documents and went through the wonderful presentation by Bryan O’Sullivan, Senior Principal Engineer at QLogic, in Google Tech Talk session. Here are few observations.

Bryan stressed on speed / performance of Mercurial. In his words it is more or less equivalent to Subversion. Mercurial is a distributed repository. You not only have the full code but also the full revision history. Redundancy is good. It allows you to work independently of other developers. It also increases the robustness of your codebase, you are not dependent solely on the availability of a central repository. However central repositories aren’t so bad either. You can mirror / clone them easily as in Subversion thereby increasing availability.

Mercurial will require certain amount of discipline by developers to make it work as the system is inherently very flexible. It is more developer centric than say Subversion, which by itself is an excellent version control system. This also has a downside. Overly developer centric code synchronization procedures are prone to create backlogs of unmerged changes when a key conduit becomes inoperable for a period of time. For example say a key developer of a critical sub-system of kernel becomes ill or unavailable. All the patches which are due to be reviewed by him before being pushed up will now be pending for indefinite period.
BTW: It is hard to even enforce such a system with Subversion.
Also if the workflow isn’t clearly defined it is likely to create a mess with large projects.

One of the best features of Mercurial is understanding and the ability to track patches. This is something I sorely miss in Subversion. It need to be able to track and layer my development thoughts. Do you know of any subversion plugin that will allows me to do this?

There is already an Eclipse plugin for integrating with Mercurial - MercurialEclipse and a plugin for integrating with Netbeans too - Mercurial NetBeans.

Mercurial is a good system for highly distributed open source development. It has developed lots of traction with scores of high profile open source projects adopting it. For corporations, I would still recommend Perforce or Subversion. I am sticking with Subversion for now.

Resources:
Mercurial concepts, tutorial, cheat sheet and download.

YOUR VIEW POINT
NAME : (REQUIRED)
MAIL : (REQUIRED)
will not be displayed
WEBSITE : (OPTIONAL)
YOUR
COMMENT :