September 28, 2009

Selecting VCS for DO4: Git versus Mercurial

Shortly, Git lost this fight in one day. There are many articles related to this, but I found the following ones most interesting:
Btw, initially I thought we must choose Git. Its TortoiseGit tool looks better than TortoiseHg; on the other hand, I found likely we have no chances to see VisualGit, because Git is distributed only under GPL license. Anyway, I decided to try both tools, and...


I spent less than 30 minutes to test all the basic features there, including:
  • Create a repository
  • Create its copy
  • Launch a web server exposing one of them via HTTP (really simple: "hg serve"). It was really interesting for me to see how Mercurial synchronizes them.
  • Local modifications
  • Commits
  • Updates / switching to older revisions
  • Sync (push / pull)
  • Merging.
Everything just worked! I was even able to convert one of our internal repositories to Hg. So it was really nice, although TortoiseHg UI isn't polished at all.

TortoiseGit + msysGit

I stopped on step 3 here: "Launch a web server exposing the repository". I couldn't even imagine it isn't easy to do this at all on windows. So it was the first signal, although TortoiseGit was looking nice.

Ok, I started to read how to accomplish this, and clearly understood I don't want to use Git:

  • If such a simple problem requires so many software to be installed and configured, I'd definitely prefer a simpler tool.
  • I discovered Git is really built as ~ 50 small applications written in C! I simply don't see any reason to prefer C instead of other languages here: VCS performance mainly depends on algorithms and data structures, so using C here is as ridiculous as writing a web site on it. Why Linus didn't use e.g. Java, if he wanted it to be portable? Language is a tool, and using completely wrong tool has no excuses for me.
  • So it became clear that it will be a hell to deal with Git on Windows. Currently I use just one of such ported tools in my daily life: Unison; everything else didn't survive.
  • Finally, I discovered that Google implemented their own Mercurial repository (the one that is available on Google Code) over BigTable (see this link). This just proves the above fact: use right tool. If you need it to be portable, don't use C; if it isn't a low-level service or driver, don't use C. Git violates both statements.
So my own conclusion is:
  • If you like to use tools developed by masochists (written in C!) for masochists (~ 50 tools!), Git is your choice.
  • Otherwise, use Mercurial.
Of course, it's joke, but every joke has some part of truth.

P.S. This also implies that DO4 source code will be available in Mercurial repository hosted at Google Code quite shortly. Install TortoiseHg - as I wrote, now DO4 requires no additional tools to be built or used.