It's lunch time, so here are my own (very opinionated) thoughts on the matter: * CVS: As a large project maintainer, I've come to hate it. It does "enough", but then falls down in places like commit atomicity. Trying to isolate a commit by bracketing timestamps isn't fun. Multiple merges to a branch are also so painful that branches should be considered "single-use". No disconnected operation. Verdict: You'd have to be insane. * SVN: Unambitious, but solid. Clean. Tries to fix the things wrong with CVS. Succeeds, mostly. Unfortunately, merging with branches is even worse than with CVS in the sense that you've got to manually grovel through logs to find merge points. No disconnected operation. Verdict: Not bad. A reasonable choice for most centralized projects. * SVK: Uses SVN repositories, mirroring them locally. Adds disconnected operation and a number of other things -- among them, 'svk smerge', which is the branch merge SVN should have had. Written in Perl. A bit slow occasionally. Verdict: Decent. I use it for the SVN-hosted projects I participate in. * arch: I've admittedly been a bit put off by the weird file naming conventions. Mister SCM, stay out of my project's namespace, thanks. But it does the things you want an SCM to do. Focuses on the whole "distributed development" thing, and of course supports disconnected operation. Verdict: Probably good, but I can't bring myself to use it. * Bazaar: Frontend to arch repositories, if I understand correctly. I think it's supposed to be the next-generation arch. Also, Bazaar NG is the next-generation Bazaar. Verdict: Probably great, but I've got no experience whatsoever with it. * monotone: Interesting piece of kit. Another decentralized SCM; repositories are .db files containing records of "facts". Conceptually, a content-addressable filesystem. Emphasis on digital signatures. Configuration file is a lua script which is both good and bad. Was maturing rapidly until one of the core developers had to leave because his employer used certain software. Verdict: Good, used it for a while but moved on. * git: A fairly raw content-addressable transactional filesystem; objects and metadata are stored in a .git directory, gzipped and named by the hash of their contents. Also supports "packed" repositories, with files containing blobs of deltas. V. nice because you can easily throw repositories around with rsync, HTTP, etc. Provides tools for performing transactions in a working directory, and cloning repositories. It isn't really a complete SCM in the traditional sense, though you could use it that way if you're determined. Verdict: Great if you're Linus and/or trying to work around (for example) some SCM-related no-compete clause. * cogito: Shell scripts on top of git which turn it into a real SCM. Works nicely; takes advantage of the benefits of git, and adds quite a lot of usability. You still occasionally have to dip into a raw git command here or there, but things go pretty smoothly nonetheless. Not as nice about renaming directories as some modern SCMs. Nice in that the SCM metadata directory is hidden, so you've not got an "MT" or a "CVS" or whatever directory staring you in the face. You can glob with impunity. Verdict: Very good. I use it for all my writing, art, and personal software projects. * Darcs: Repository is a _darcs directory containing a pristine snapshot of the tree and a bunch of patches. Darcs is based on a formal approach to performing operations on patches. Favorite of Haskellites for many reasons. Verdict: Good, possibly very good. Not used it much though; Cogito fills the void for me. Have I missed any? -mental