Summary: No, Git is not more powerful than Mercurial. And no, Mercurial is not easier to use. Most of these things may have been true in 1947, when Git and Mercurial were created, but are no longer true. But all the blogs keep repeating the same BS.
This discussion is continued from Why use a version control system. Read it if you haven’t.
So you have decided to use a revision control system. Good for you. Now start the religious wars. Which one is better?
Before we can start burning heretics, let’s review a few concepts.
Centralised Version Control System (CVCS)
CVS and SVN are the most famous examples of this. In CVCS, you have a central server on which your code is stored. You check code out, modify it, and push it back.
The reason this has been so popular is because it sits well with the centralised command and control most corporations love. Everything is controlled from one central server.
Distributed Version Control System (CVCS)
Git and Mercurial are examples of this. Gone is the central control. Now any code base can become the “central” server. Not only that, but DVCS allow you to check into your local repository (on your disk, or online), which means you can check code in daily, or hourly, without having to worry about breaking other people’s code. You can also check in even if you don’t have internet access.
DVCS fit well with the open source world (though they are slowly moving into the corporate world, usually via proxy). In open source projects, there are hundreds of contributors, and while there maybe several senior developers, there are no “managers” or “owners”.
So, which one?
First of all- SVN is worth knowing, even if its just the basics, as most Big Corp still use it. Big Corporations are usually 10 years behind the open source world.
But if you are starting your own project, avoid SVN, as it offers you little or no benefits.
Git vs Mercurial
Right, lets cut the bullshit. We both know why you are really here. You want to know how to choose between Git and Mercurial. Well, sorry to say, ain’t no easy answer. Git was born in the Linux world. For the Linux kernel, actually. It is written in C, and is supposed to be fast, but hard to use and unforgiving. For Real Men (TM), not sissy girls.
Mercurial was created around the same time as Git. It’s origin story is roughly the same as Git’s. When the free version of Bitkeeper was withdrawn from the Linux community, both Git and Mercurial were created to fill the gap. Mercurial was written in Python, and supposed to be much easier to use.
Other than that, most blogs take some minor points, and argue for hours on why that makes Git or Mercurial better.
To me, these wars look like “Our sky blue is better than your navy blue”, all the while I’m thinking, they look the same to me.
So the accepted wisdom says:
- Git for Linux type environments, where you want speed of execution and lots of options
- Mercurial for other OS, where you want speed of development, and ease of use.
I originally planned to use Mercurial, since I prefer Python (though the day job is in C). I also didn’t like the religious fanaticism around the Git crowd, and their frankly insulting and misleading blogs regarding other version control software. I also wanted something that would work on Windows, and I loved GUIs. I hate having to type commands, At work, even though we have linux boxes, I use Samba and Tortoise.
So I decided to try Mercurial with TortoiseHg. Bad mistake.
Tortoise isn’t easy to use at all, at least for Mercurial. And then when I decided to remove TortoiseHg, it also deleted my repository, which had unchecked in changes. ARGHHHHH! Tortoise! Bad boy.
I couldn’t find any easy to use tool for Mercurial. In desperation I looked at Github, as that’s what almost everyone is using.
GitHub is the Winner
Everyone is on GitHub nowadays. And then I tried GitHubs own GUI program. And I was like, wow. Look at this:
That’s it. That’s the whole tool. It’s so easy to use. You can’t go wrong, and you certainly don’t need a manual. Want to create a repository? Click on create. Want to clone someone’s code? On their website, they have a clone option, and it automatically opens this tool.
Click on a repository, and you can easily commit/push:
To compare, search for screen shots of TortoiseGit or TortoiseHg. In TortoiseHg, I had to spend ten minutes learning how to push my changes to the server.
So even though I don’t like the attitude of many Git-ians, GitHubs easy to use tool converted me. At the end of the day, these are just tools. Never forget that.
GitHub vs Bitbucket vs Kiln
Just for thoroughness, I need to let you know that GitHub isn’t the only game in town. Bitbucket was started for Mercurial repositories, but now they offer both Git and Mecurial. They have their own tool (Source App), but I found it hard to get started, unlike Github’s tool.
Kiln, from FrogCreek software, was also originally a Mercurial tool, though they now support Git as well. Which tells me that Git is really winning the war here.
As to how to choose between them, Kiln, by its own admission, is for corporations. GitHub and Bitbucket are for open source projects. Though you can use any of them for any purpose.
The main difference between Github and Bitbucket(other than Github doesn’t support Mercurial) is the business model. Github allows unlimited users, but charge for private repositories.
Bitbucket allow private repositories, but charge based on users. To me, this seems like a more corporate pricing strategy, as corporations care about having private repositories, and usually have a limited number of users(unlike open source projects, which can have thousands).
So which one to choose will depend on your preferences. Mine are: Github for my open projects, Bitbucket for the ones I want to keep hidden.
In case you didn’t notice: This is a business decision, not a technical, and certainly not a religious one.