Mercurial > SVN now and forever.

Disclaimer: I am not going to compare Mercurial vs Git. I don’t use Git enough to have enough ammo to make any comment on that. In fact, if you are so inclined, you can reread the post with %/s/Mercurial/Git/g and it will probably be all the same.

With that said, Mercurial has saved me hours of time over the last 2 months at work. We have lots of contractors, interns, project churn etc. This means that very often people do not have permission to commit or check out from our canonical servers their first day of the project. Mercurial, however, can self host from my development machine. This means when I am working with new team members, they can clone my local repo and work until IT gets their ACLs updated. Once they CAN commit it is trivial to point back to the canonical server.

The second bit is how mercurial handles branching and the fact that hgserve makes really pretty graphs. Yesterday an intern didn’t commit some assets to go with her updates and broke the build. It was trivial for me to branch before her commit, continue my work, and merge with her corrected work later. I spent literally more time writing this post than I did on hand holding the merge/branch.

For a long time I had said that SVN is fine for projects with a single source tree and relatively few developers. SVN is much easier to get a external project set up and hosted than in Mercurial and for banging out a few lines of code and needing an “Oh, crap” home off my local machine it can still get that job done. However, I will start moving project I actively work on for more than a few hours out of SVN and into Mercurial. Who knows, maybe I will start moving them to Github one day.