MenTaLguY
1/3/2006 4:41:00 PM
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