Alien-SVN
view release on metacpan or search on metacpan
src/subversion/doc/user/lj_article.txt view on Meta::CPAN
The Subversion Project: Building a Better CVS
==============================================
Ben Collins-Sussman <sussman@collab.net>
Written in August 2001
Published in Linux Journal, January 2002
Abstract
--------
This article discusses the history, goals, features and design of
Subversion (http://subversion.tigris.org), an open-source project that
aims to produce a compelling replacement for CVS.
Introduction
------------
If you work on any kind of open-source project, you've probably worked
with CVS. You probably remember the first time you learned to do an
anonymous checkout of a source tree over the net -- or your first
commit, or learning how to look at CVS diffs. And then the fateful
day came: you asked your friend how to rename a file.
"You can't", was the reply.
What? What do you mean?
"Well, you can delete the file from the repository and then re-add it
under a new name."
Yes, but then nobody would know it had been renamed...
"Let's call the CVS administrator. She can hand-edit the repository's
RCS files for us and possibly make things work."
What?
"And by the way, don't try to delete a directory either."
You rolled your eyes and groaned. How could such simple tasks be
difficult?
The Legacy of CVS
-----------------
No doubt about it, CVS has evolved into the standard Software
Configuration Management (SCM) system of the open source community.
And rightly so! CVS itself is Free software, and its wonderful "non
locking" development model -- whereby dozens of far-flung programmers
collaborate -- fits the open-source world very well. In fact, one
might argue that without CVS, it's doubtful whether sites like
Freshmeat or Sourceforge would ever have flourished as they do now.
CVS and its semi-chaotic development model have become an essential
part of open source culture.
So what's wrong with CVS?
Because it uses the RCS storage-system under the hood, CVS can only
track file contents, not tree structures. As a result, the user has
no way to copy, move, or rename items without losing history. Tree
rearrangements are always ugly server-side tweaks.
The RCS back-end cannot store binary files efficiently, and branching
and tagging operations can grow to be very slow. CVS also uses the
network inefficiently; many users are annoyed by long waits, because
file differeces are sent in only one direction (from server to client,
but not from client to server), and binary files are always
transmitted in their entirety.
From a developer's standpoint, the CVS codebase is the result of
layers upon layers of historical "hacks". (Remember that CVS began
life as a collection of shell-scripts to drive RCS.) This makes the
code difficult to understand, maintain, or extend. For example: CVS's
networking ability was essentially "stapled on". It was never
designed to be a native client-server system.
Rectifying CVS's problems is a huge task -- and we've only listed just
a few of the many common complaints here.
Enter Subversion
----------------
In 1995, Karl Fogel and Jim Blandy founded Cyclic Software, a company
for commercially supporting and improving CVS. Cyclic made the first
public release of a network-enabled CVS (contributed by Cygnus
software.) In 1999, Karl Fogel published a book about CVS and the
open-source development model it enables (cvsbook.red-bean.com). Karl
and Jim had long talked about writing a replacement for CVS; Jim had
even drafted a new, theoretical repository design. Finally, in
February of 2000, Brian Behlendorf of CollabNet (www.collab.net)
offered Karl a full-time job to write a CVS replacement. Karl
( run in 0.555 second using v1.01-cache-2.11-cpan-411bb0df24b )