Abandoning Darcs for Git

I used to be a die-hard darcs user. I switched to git.

Someday I'll write more about this switch, but recently I came across an article that came pretty close to an accurate summary of the fundamental difference between the two systems:

Git assumes each patch's parent is the immediately previous commit, and allows you to work around that fact. Darcs assumes each patch's parent is the latest one with diffs that overlap, and allows you to work around that fact.

My experience is that “in real life” diffs overlap far more often than you'd expect, leading to so many “false parents” that darcs' theoretically-superior cherrypicking winds up being no better than git's. Because darcs puts so much faith in its own view of which patches are parents of which other patches, it offers you inadequate tools for circumventing or correcting errors in this view.

The article also seemed to line up with my experience:

… it's equivalently useful (if not more so) to rebase your code against a known good order of patches, rather than to attempt relatively tricky merges over the partial order of patches

Finally a nice quote by Norman Ramsey:

The highly touted 'theory of patches' is not published anywhere in any form that can be understood and checked by anyone with a little bit of mathematics (e.g., group theory or algebra)."

However, I still have one gripe with git: apparently it has inherited CVS's brain-damaged assumption that empty directories are irrelevant.