No Darcs? Personally I prefer darcs over other distributed version control systems, unfortunately their tooling is somewhat behind and due to the github craze we're forced to use git on many projects,it's very sad as the ease, the features, and simplicity of darcs is in my opinion unparalleled by any of the others listed.
The last time I looked at darcs -- which, admittedly, was years ago -- there was a problem where, under certain poorly understood circumstances that tended to apply to most people with large repositories, performance would fall off a cliff, meaning IIRC that from then on, every merge could take hours. Or years -- I think it went exponential.
The Wikipedia page about darcs says "Although the issue was not completely corrected in Darcs 2, exponential merges have been minimized."
I wonder what "minimized" means here. On the face of it, this seems like a pretty compelling reason not to use darcs for anything important.
I haven't experienced that issue in years. I do remember the issues it had before, and thankfully they seem to have been addressed. I don't know how up to date the Wikipedia entry is, but to the best of my knowledge this issue has been resolved, especially if you use darcs2 formatted repos.
I love Darcs conceptually and I used it for a few years but after moving to Git I have to say I prefer it. Darcs is certainly cleaner than how Git is actually implemented (scripts and perl everywhere) but Git is nicer to work with day to day. The reason is that in Darcs to make a branch you have to basically check out the tree again. In Git I never need more than my repo directory. All branch checkouts, etc. happen right in that directory. That may sound like a trivial difference but in practice this can save hours a week for the way I work. Git can do most of the cherry picking, etc. that Darcs can do.
I do miss the ability to check in changes that I only ever want to have local though. I haven't found a satisfactory way to do that in Git yet.
I agree about the convenience of having multiple branches in a single repo, as opposed to the darcs way which is one working directory per branch. For one thing, I never found a convenient way to switch between branches in an IDE when using darcs. For another, having a separate working copy for each branch consumes disk space unnecessarily. (Hopefully with the popularity of SSDs these days, people are less likely to reflexively respond "disk is cheap," but just in case: with git, all branches of my current project fit on my USB stick; with darcs, they wouldn't. It also makes a big difference for copying times.) darcs repos can be deduplicated using hard links, but that only affects the patch history--the working copy is still duplicated.
[edit: removed question that was answered by sibling post]
Yep, this is one of my biggest issues with git. I can't fork builds and still push/pull from each other. The best you can do is a git rebase to pull in partials, but then you'll never really be able to get new pulls. It's so nice being able to fork, and have independent deviations, while still sharing the remaining code.