Mercurial

acme on 2007-12-19T10:48:39

I've been using Mercurial for the past few weeks on a project and it does exactly what I expect it to do. Everything works, and I especially like hg serve.


git?

Ovid on 2007-12-19T11:29:47

Any chance you've used git and can make sane comments comparing the two? We're getting tired of Subversion here at work and we're looking for something sane.

Re:git?

Aristotle on 2007-12-19T13:07:10

I’ll vouch for both. The technical bedrock of git is more robust, though trades this for repository compactness, but both are similar in their underlying approach (both implement a content-addressable file system). Mercurial is easier to come up to speed with, and it’s also got a great book, however git is getting easier all the time. They’re both very fast, and are generally similar in most characteristics. At the time of this writing, Mercurial works just fine on Windows whereas git only has an experimental port that requires Cygwin. Mercurial comes with an patch stacking extension included (called Mercurial Queues), whereas for git you need one of several competing external add-ons (last I checked anyway).

Really, it’s hard to find a huge difference. I went for Mercurial first due to the book and Mercurial Queues, but I haven’t used either SCM too much yet and I might switch to git part-way through if it turns out easier to convert my Subversion repo to it.

(And the conversion difficulty is mostly the fault of Subversion! After having seen how much easier hg and git make everything, the comparative painfulness of doing anything with Subversion beyond a conflict-less svn commit is astonishing.)

Re:git?

mugwumpjism on 2007-12-20T20:31:20

For various reasons I've been asked to comment on this :-). Bear in mind I'm no real expert on Mercurial.

I'm not sure that Mercurial's revlog can be called content-addressable; a cursory glance shows a per-file backing store, and Sun reported that they can wedge it in nasty ways by interrupting it at inopportune moments, which seems quite non-content-addressed behaviour. It does use a revision hash, sure, but I don't think it uses it for file revisions too.

It is nice that they've managed to combine their "pull" address with a browsable url that actually can show history etc (the web interface borrowed, as it happens, from git). However I was a little disappointed when I found that I couldn't just copy files to somewhere in my web root to serve them via http, as works in darcs, bzr and git.

The windows support for Git no longer requires cygwin - there is an mSys port (mSys is also used by Strawberry Perl, for example) which is apparently pretty good.

The patch queue argument is a valid complaint; most of the core developers use an alternative approach called rebasing most of the time instead. As a consequence, Stacked Git which is really the best equivalent tool for git didn't get the same level of design review as the rest of git and has some annoying little niggles.

However in general I'd agree that Mercurial makes it well inside the "worthy" class of tools.