We had a decision to make about which version control system to switch to. We were using CVS and were not happy with it (the project grew too big for CVS to keep us sain). So we decided to do a quick analysis of what options do we have. We looked at Mercurial, Git, SVN and Bazaar. We were using Eclipse for Java development along with Cruise Control for Continuous Integration and JIRA for bug tracking so compatibility with those tools was a big consideration also.
You can view the comparison spreadsheet here
Conclusion Git was not an option because of its bad support on Windows and Mac OS. Bazaar does not fit because of its small market share. I think that Mercurial was the best choice for us because
- We are going to do massive refactorings to extract modules which implymoving and renaming files, and Mercurial’s ability to track renames and moveswill make merging easier
- We can continue working when internet connection is broken or very slow.
- We can query repository using hg grep or web interface
- Collaboration between developers is easier with Mercurial, developers can publish changes with local web server and ask for peer review and great integration into ‘review board’ (which we use for code reviews) through the ‘postreview’ extension.
- Branching is very easy, any developer can create a branch, experiment and then team lead can decide if the changes should be accepted and go into the central repository.
The only advantage of Subversion over Mercurial is its well established tools and integration support. Although, Mercurial is improving very fast and its current tools support is acceptable. The latest version of Mercurial Eclipse plugin is quite good.