Mercurial-KilnSo, I've switched from SVN to Mercurial for my source control - and I think you should, too!
Mercurial is one of those fancy new "distributed" source control systems. Like Git. Only it is for people who don't hate Microsoft. Not that it is completely Windows friendly. There is no Windows version of the Mercurial server (yet). Not a free one anyway. But the client tools seem to be much stronger in Windows, and the community around it seems to be much less hostile. The other thing that separates it from Git is that the usage patterns are much more "SVN-like" and perhaps easier for someone to migrate to. Especially if you are coming from an SVN or VSS background.
So, what's all the fuss about? To me, it comes down to two main features that I just don't want to go without ever again:
- Merging works better. I won't lie and tell you that merging is now always a no-brainer. But often, IT IS. Mercurial is just a lot smarter about managing branches and change-sets than other systems that I've tried have been. Merging even a branch only a week or so old in SVN is a job only to be done with strong alcohol nearby. Which is why many shops avoid branches, when they really would benefit from using them. It sucks. In Mercurial, it simply sucks less often.
- It's distributed! What? Like the line from The Matrix - "There is no server." And, really just like in The Matrix - it's a lie. Mercurial works in such a way that every person sharing the code has everything. Meaning the entire history. If you want to go back to a previous version of the code base, or make a branch, or make a branch based on a previous version, none of that needs to connect to "the server." There is no server. You are the server. Freaky. But awesome. And, heck, if you use TortoiseHg as your client then you can even be the server for other users to collaborate with on a small scale.
It takes some getting used to. Mostly it is the "two phase commit" that seems to trip people up. Meaning, when you commit your work to the repository, you have not yet caused those changes to appear "on the server" for other users. Since you effectively ARE the server, your commit is a local operation. You have to then explicitly PUSH those changes to some remote server that other people have access to if you want them to be able to have your changes. IMHO it is very much worth learning and using. Here are some screenshots of the TortoiseHg client:
The Repository Explorer:
The Commit Window:
Looking at a "diff" of a file with it's previous version (using BeyondCompare!):
Kiln is a Mercurial server and supporting website created by the great folks behind StackExchange. This brings it to a completely higher level. They host it for you, or you can license it to run on your own servers in your own location. Kiln is like a Mercurial server with just a little extra power (driven through the website) that really makes Mercurial shine. Kiln adds value to Mercurial in three major ways:
- The web interface itself is very nice and functional. You can branch, push, pull, etc right there. Screenshots below.
- The web interface also provides a complete Code Review system - letting you see which files changed from version to version and letting you do line-by-line review, with comments and history, etc. Worth the price of admission right here.
- Very tight integration with their other product, the highly respected but IMHO horrible bug tracking software Fogbugz. I can't tell you how much I hate Fogbugz, but I'm stuck with it due to the nice packaged price we get with Kiln. It is a testament to how much I love Kiln that I put up with Fogbugz at all. I'd rather use pencil and paper than Fogbugz. But, if you are one of those people that doesn't hate it, there is tremendous integration with Kiln (and with Visual Studio) that you may enjoy. I feel dirty for having pushed it.
Here are some screenshots of Kiln:
An activity window: http://hginit.com/top/
The history of a repository:
The files in a repository:
The source content of a file:
A code review in progress:
- TortoiseHg (all you really need to use Mercurial on Windows)
- A great set of articles to help you learn Mercurial.