Ian Bicking: the old part of his blog

Re: DVCS Mini Roundup

After an extensive experience with CVS at work, for my personal (i.e. no serious need for distributed VCS) projects that are now more or less in CVSNT I'm considering Mercurial. On paper, it seems to have good features, good performance and unusually good Windows support, not "someone wasted his time to compile an unofficial binary of an obsolete version that we don't want to contaminate our server with" or "using Cygwin it more or less works for most people", as seems more common. Am I going to miss something the other wonderful systems have or to find limitations?

Comment on DVCS Mini Roundup
by Lorenzo Gatti


Mercurial is behind bzr, darcs and others with respect to some simple features, and some things do not work as well in Windows as bzr or darcs.

In particular, Mercurial has quite a few problems with renaming, which are a mostly recent addition. It also has the strange notion that you cannot add directories, because it doesn't "do" directories. You can add files in a directory though.

Mercurial's greatest benefits over bzr and darcs at the moment seem to be the short command, "hg", and the multi-head support, which some people admit they don't use simply to avoid confusion and human error. You can approximate multi-head functionality with lightweight branches.

Mercurial doesn't have as much developer support and needs help.

Mercurial also suffers from some slight UI issues not affecting either bzr or darcs. Sometimes it seems the Mercurial folks are against dealing with some of these issues, because it goes against their principles, but it seems very simple to me what to do on rename, and it was apparently as simple to the developers of bzr, darcs, monotone and more.

Mercurial Windows support is primarily an illusion. The bzr site is a mess. Following the Mercurial tutorial using bzr is easier than doing so using hg. Give it a try, especially if you use Windows.

# kai

How am I going to decide between Bazaar-NG and Mercurial now? :-)

I installed Mercurial and am using it. But I reckon that Bazaar-NG does somethings more user-friendly like you mentioned.

Now I don't know anymore... Maybe I'm going back to Bazaar-NG with a 0.8 pre-release...

# Joao

I decided to keep using Mercurial for now.

# Joao

I'm afraid my sarcastic description of window versions applies to Bazaar-NG.

http://bazaar-vcs.org/BzrOnPureWindows says: Failing tests in bzr 0.6 selftest is failed for some tests. Mostly because some tests written in non-windows compatible way.

The current version is 0.7: failing tests can be a temporary problem, but not updating the results clearly shows neglect. Now I've found the Windows installer, but the first choice seems to be Cygwin. Can you explain the shortcomings of Mercurial, apart from developer attitude and lack of renaming support, and the specific Windows problems it has? You make very generic statements.

# Lorenzo Gatti

If I wrote up a document on this and all other evaluations I perform I'd have no time for work and I might unwittingly cloud the issue in the future by providing a checklist of problems for poorly reviewed VCS to quickly gloss over. So, evaluate them yourself.

Do the hg tutorial with bzr and hg, skipping the export section. You can add darcs and monotone to your short-list if you want.

Then do some of your own evaluations, like a simple rename, dir rename, merging divergent branches where one contains a renamed file which the other branch made changes to under original name.

Finally, evaluate a simple de-commit of changes.

Keep and eye on "log" (bzr/hg) and "changes" (darcs) when evaluating.

This takes less than an hour for each. You should find the results telling.

You should find bzr ui and functionality superior, but if you don't there's no need in anyone changing your mind, use what you like. In the end, I like mercurial for almost indescribable reasons, it has a better name and a more admirable history, but I can find solid technical reasons not to use it. I can find less (or no) technical reasons not to use bzr. I do believe it makes sense bzr is functionality and ui superior.

I evaluated hg, bzr and darcs fully, but discarded monotone early because I didn't like the ui. bzr, hg and darcs are all great and at a different time in their lives as products I might be inclined to pick any of them. But, I need VCS right now, and right now it seems bzr is the best choice.

You do not need any cygwin stuff for hg, bzr or darcs. If you find anything related to cygwin, skip it and look elsewhere. The bzr homepage is admittedly confusing, especially when it comes to downloads, some pages need to be deleted.

P.S. I just learned bzr shared repos are like mercurial's multi-heads (and perhaps less prone to human error).

# kai

It looks like mercurial's Windows support is even worse if you use the official source distribution. Some of that obviously makes its way through even in the Windows-friendly package from Bryan O'Sullivan.

I noticed this as I am now evaluating the ease/difficulty of contributing to each project (I even get to fix the same thing in both bzr and hg).

However, I will need to fix even basic things like "hg diff" in Windows if I want to contribute other Windows fixes. I didn't have to do anything like this using bzr, because the core distribution already works in Windows.

# kai

Do you want VCS, or DVCS? If you don't need distribution, or can live with a centralized repository with a lightweight network protocal and the ability to work detached, the there's a clear winner that nobody has mentioned yet: Perforce. Yeah, it's commercial. But they'll give free licenses to open source projects. They support more platforms than most OSS projects. Lots of add-on and extras. Lots of flexibility. It doesn't leave turds in your workspace. A command name (p4) that's as short as mercurials.

And the kicker - it's the only VCS I've ever encountered that gives me the kind of control I really want over a merge. After doing merges with perforce, every other VCS feels like I'm throwing my code against the wall, and hoping the right parts stick.

You can make "p4 resolve" act like other VCS merge commands, and merge everything it can and let you deal with conflicts. Or you can get an interactive loop, where you get told about the potential merge, can examine the files, or the automated merge, and choose to use anyone one of those three, or edit any one of those three and use that.

I can - and regularly want to - do things with perforce's merge that are at best very painfull, and in some cases impossible, with other VCS systems. If a VCS can't do the equivalent of "p4 resovle -at", it isn't going to replace perforce for me.

# Mike Meyer

In reply to kai:

You didn't give any details on problems you had with Mercurial. Can you post some specifics?

I'm using Mercurial 0.9.3 on windows and linux quite successfully. Rename works just fine for me. Developer support has been great. (For example, look at the very helpful and patient posts in the Mercurial email lists.) What UI issues? Your last paragraph appears to be confusing Bazaar with Mercurial, so I don't understand what you were trying to express.

# branch