On Tue, Mar 13, 2007 at 04:25:50AM +0900, Trans wrote:
Should I be using SVN rather than Darcs or Git?
Only if all your co-developers are. But otherwise, probably not.
So I’m wondering, what’s so special about SVN as opposed to the other
choices? Is it because SVN is more like CVS than the other choices?
Pretty much, it’s also been around longer and thus is “more mature.”
Subversion is reasonably familiar to those who are used to the CVS
paradigm
of revision control. Although just because people are used to it, and
it’s
popular, doesn’t make it necessarilly good. Frankly, I’m not much of a
fan
of Subversion, although I much prefer it to CVS.
Also, Git was written by Linus Torvalds, which is about as good as
credentials can get.
Yes, however Git was written to achieve nothing more than managing the
Linux kernel. The fact that it’s applicable to other problem domains is
a
coincidence, not a design feature. If you’re managing a project that
much
resembles the Linux kernel, Git might be the right choice for you. If
not,
there might be an impedance mismatch.
Recently I’ve become a fan of Mercurial. It has a few issues (besides
being written in Python =P), but otherwise I find it to be a better
match
for my needs than Subversion. I also considered Git, but I found it
much
less approachable, although 1.5.0 is supposed to be easier to use.
My biggest gripe with Subversion is that branch merges are braindead
(have
to specify revision boundaries), which makes branching much less useful
than it could be. Two minor gripes are that the BDB backend was a
mistake
only recently seems to have gone away, and that operations tend to be
painfully slow.
In general, I’m a fan of the distributed model of development, be it
with
Mercurial, Git, Darcs, etc. Branching is a great concept that isn’t
used
effectively in CVS or Subversion becuase of branch/merge limitations.
I like being able to checkout a project (often one I don’t have
permissions to the central repository other than read), make a bunch of
local changes and local commits that don’t affect other users, then
once
tested perform a branch push (possibly with a pull/merge).
I find that with Subversion folks are much less willing to make
intermediate commits since they tend to affect all users unless a
separate
branch is used, and branches are difficult with Subversion.
The one scenario where I find Subversion really useful is when I
specifically don’t want to maintain a local copy of an entire
repository,
especially a large one like the Linux kernel. With Subversion, I only
need
a local copy of the checked out revision. That’s the one thing where I
wish there was better handling in distributed revision control
systems–although folks may claim that such handling would break the
paradigm.