Mercurial
From APIDesign
Mercurial (also known as Hg) is a distributed versioning system.
Question
There are a couple of guys in the team that I am currently working in who would like to switch from Subversion to Mercurial. Since you have been through that already, I was wondering if you could give me some feedback on how it went. Did the migration go well, did you have any major disruptions, ... ? Any practical hints are greatly appreciated.
Answer
I am really glad we switched to Hg. Distributed systems are really great. However the transition period was not easy. While Subversion] is for clueless developers, in the Hg world people have to think. And that is slightly unnatural for some of these days programmers. One set of notes describing the issues can for example be found at Mercurial_vs._Subversion page.
For a while people were complaining and making mistakes. But slowly most of them got over the problems and learned at least the basic commands to use Hg. At that time I decided to make them more effective and we implemented netbeans:HgParallelProjectIntegration.
This workflow really uses the power of distributed versioning system. You can have a pyramid of repositories and builders and on each level you can ensure the commit breaks nothing essential. Mistakes done by individual developers are isolated and make little harm (in contrast to previous model when each error means to everyone: "stop the world" and fix it). I am really proud of this workflow, but my co-workers hated me for at least six months. Of course, I was really bad, I forced them to think a bit about Hg, while they wanted to code.
These days the hate is mostly gone. Hg and parallel integration really makes us more productive. Once you get used to it, it is almost natural (throw some sarcastic comments in here). Definitely more natural than following practice of our new co-workers:
So my advice is clear: Use Hg you will not have to learn to sing!
<comments/>
Side note
The netbeans:HgParallelProjectIntegration has been greatly inspired by a presentation by Koshuke about more distributed teamwork flow for Glassfish. The hierarchical delivery model fits naturally into distributed versioning system like Hg. However as Koshuke mentions at the end this proposal just works fine with Subversion too. You don't have to change your versioning system to improve your teamwork.