I'm definitely much more in the git camp than the svn one, but there are a couple of features that svn has that are not available, or not entirely supported, in git:
checkouts of a particular directory. To get this in git you have to create a submodule in that directory, and you have to make that change in the repo that people are pulling from, and it's kind of complicated, and involves using filter-branch
if you want to do it on an existing repository. With svn you just check out the directory. There was rumoured to be somebody working on this feature, and more, for git as a summer of code project a couple of years ago, but it doesn't seem to have gotten anywhere.
revisioning of file metadata. With git you can set up a commit hook to save this sort of thing. there's a script distributed with git in /usr/share/doc/git-core/contrib/hooks/setgitperms.perl
that will save permissions and ownership data with each commit. SVN as I recall has richer support than even this script provides.
As for the others, I'm not too clear on the differences; the advent of lossless bridges like hg-git has made it questionable that there even are any meaningful ones in some cases. hg-git
is a bridge capable of bidirectionally transferring information between a remote git repo and a local mercurial one. So at least topologically, they are equivalent. Presumably the interface syntax is not a particularly significant factor in the system itself. That being said, I've not really used mercurial, nor bazaar, darcs, etc., in any meaningful capacity. Some are rumoured to have better gui tools and integration with IDEs that I also don't use.
I am interested in learning more about the other DVCSs. However, the common wisdom (and this thread is no exception) seems to be simply that they are "easier to learn," with the assumption implied that no further explanation is necessary. Details are seldom, if ever, provided, and I am left to wonder if perhaps the speaker found them easier to learn because they learned them first and have a mental model based on that tool.
I'm aware of some of the differences — for example, in mercurial, there is normally no difference between a branch and a repository (if I remember/understood correctly). However I've not learned anything about any of the other DVCS that would indicate a clear advantage in terms of usability and learning curve. Personally I find the idea that a repository does not normally contain branches to be, if anything, more confusing than the alternative. This is almost certainly because I learned git first. However, of the things that I found confusing about git when I was learning it, the concept of a repository containing multiple branches was not one of them.
I do find it confusing (and annoying) that a directory cannot contain multiple repositories at its root, or a repository contain multiple orthogonal sets of branches. These two possibilities would equate to more or less the same thing, and if another DVCS facilitates this functionality, that would be of no small interest to me. But my tentative sussings-out of the alternatives to git
have thus far not yielded any such delectable fruit.