-
Subversion is a free/open-source version control system.
That is, Subversion manages files and directories, and the
changes made to them, over time. This allows you to recover
older versions of your data, or examine the history of how your
data changed. In this regard, many people think of a version
control system as a sort of “time machine”. Subversion can operate across networks, which allows it to
be used by people on different computers. At some level, the
ability for various people to modify and manage the same set of
data from their respective locations fosters collaboration.
Progress can occur more quickly without a single conduit through
which all modifications must occur. And because the work is
versioned, you need not fear that quality is the trade-off for
losing that conduit–if some incorrect change is made to
the data, just undo that change. Some version control systems are also software configuration
management (SCM) systems. These systems are specifically
tailored to manage trees of source code, and have many features
that are specific to software development–such as natively
understanding programming languages, or supplying tools for
building software. Subversion, however, is not one of these
systems. It is a general system that can be used to manage
any collection of files. For you, those
files might be source code–for others, anything from
grocery shopping lists to digital video mixdowns and
beyond.
In early 2000, CollabNet, Inc. (http://www.collab.net) began seeking developers to
write a replacement for CVS. CollabNet offers a collaboration
software suite called CollabNet Enterprise Edition (CEE) of
which one component is version control. Although CEE used CVS
as its initial version control system, CVS's limitations were
obvious from the beginning, and CollabNet knew it would
eventually have to find something better. Unfortunately, CVS
had become the de facto standard in the open source world
largely because there wasn't anything
better, at least not under a free license. So CollabNet
determined to write a new version control system from scratch,
retaining the basic ideas of CVS, but without the bugs and
misfeatures. In February 2000, they contacted Karl Fogel, the author of
Open Source Development with CVS
(Coriolis, 1999), and asked if he'd like to work on this new
project. Coincidentally, at the time Karl was already
discussing a design for a new version control system with his
friend Jim Blandy. In 1995, the two had started Cyclic
Software, a company providing CVS support contracts, and
although they later sold the business, they still used CVS every
day at their jobs. Their frustration with CVS had led Jim to
think carefully about better ways to manage versioned data, and
he'd already come up with not only the name
“Subversion”, but also with the basic design of the
Subversion data store. When CollabNet called, Karl immediately
agreed to work on the project, and Jim got his employer, Red Hat
Software, to essentially donate him to the project for an
indefinite period of time. CollabNet hired Karl and Ben
Collins-Sussman, and detailed design work began in May. With
the help of some well-placed prods from Brian Behlendorf and
Jason Robbins of CollabNet, and Greg Stein (at the time an
independent developer active in the WebDAV/DeltaV specification
process), Subversion quickly attracted a community of active
developers. It turned out that many people had had the same
frustrating experiences with CVS, and welcomed the chance to
finally do something about it. The original design team settled on some simple goals. They
didn't want to break new ground in version control methodology,
they just wanted to fix CVS. They decided that Subversion would
match CVS's features, and preserve the same development model,
but not duplicate CVS's most obvious flaws. And although it did
not need to be a drop-in replacement for CVS, it should be
similar enough that any CVS user could make the switch with
little effort. After fourteen months of coding, Subversion became
“self-hosting” on August 31, 2001. That is,
Subversion developers stopped using CVS to manage Subversion's
own source code, and started using Subversion instead. While CollabNet started the project, and still funds a large
chunk of the work (it pays the salaries of a few full-time
Subversion developers), Subversion is run like most open-source
projects, governed by a loose, transparent set of rules that
encourage meritocracy. CollabNet's copyright license is fully
compliant with the Debian Free Software Guidelines. In other
words, anyone is free to download, modify, and redistribute
Subversion as he pleases; no permission from CollabNet or anyone
else is required. When discussing the features that Subversion brings to the
version control table, it is often helpful to speak of them in
terms of how they improve upon CVS's design. If you're not
familiar with CVS, you may not understand all of these features.
And if you're not familiar with version control at all, your
eyes may glaze over unless you first read Chapter 1, Fundamental Concepts, in which we provide a gentle introduction
to version control. Subversion provides: - Directory versioning
CVS only tracks the history of individual files, but
Subversion implements a “virtual” versioned
filesystem that tracks changes to whole directory trees
over time. Files and directories are
versioned. - True version history
Since CVS is limited to file versioning, operations
such as copies and renames–which might happen to
files, but which are really changes to the contents of
some containing directory–aren't supported in CVS.
Additionally, in CVS you cannot replace a versioned file
with some new thing of the same name without the new item
inheriting the history of the old–perhaps completely
unrelated–file. With Subversion, you can add,
delete, copy, and rename both files and directories. And
every newly added file begins with a fresh, clean
history all its own. - Atomic commits
A collection of modifications either goes into the
repository completely, or not at all. This allows
developers to construct and commit changes as logical
chunks, and prevents problems that can occur when only a
portion of a set of changes is successfully sent to the
repository. - Versioned metadata
Each file and directory has a set of
properties–keys and their values–associated
with it. You can create and store any arbitrary key/value
pairs you wish. Properties are versioned over time, just
like file contents. - Choice of network layers
Subversion has an abstracted notion of repository
access, making it easy for people to implement new network
mechanisms. Subversion can plug into the Apache HTTP
Server as an extension module. This gives Subversion a
big advantage in stability and interoperability, and
instant access to existing features provided by that
server–authentication, authorization, wire
compression, and so on. A more lightweight, standalone
Subversion server process is also available. This server
speaks a custom protocol which can be easily tunneled over
SSH. - Consistent data handling
Subversion expresses file differences using a binary
differencing algorithm, which works identically on both
text (human-readable) and binary (human-unreadable) files.
Both types of files are stored equally compressed in the
repository, and differences are transmitted in both
directions across the network. - Efficient branching and tagging
The cost of branching and tagging need not be
proportional to the project size. Subversion creates
branches and tags by simply copying the project, using a
mechanism similar to a hard-link. Thus these operations
take only a very small, constant amount of time.
- Hackability
Subversion has no historical baggage; it is
implemented as a collection of shared C libraries with
well-defined APIs. This makes Subversion extremely
maintainable and usable by other applications and
languages.
Subversion's ArchitectureFigure 1, “Subversion's Architecture” illustrates
a “mile-high” view of Subversion's
design. On one end is a Subversion repository that holds all of your
versioned data. On the other end is your Subversion client
program, which manages local reflections of portions of that
versioned data (called “working copies”). Between
these extremes are multiple routes through various Repository
Access (RA) layers. Some of these routes go across computer
networks and through network servers which then access the
repository. Others bypass the network altogether and access the
repository directly. Subversion, once installed, has a number of different
pieces. The following is a quick overview of what you get.
Don't be alarmed if the brief descriptions leave you scratching
your head–there are plenty more pages
in this book devoted to alleviating that confusion. - svn
The command-line client program. - svnversion
A program for reporting the state (in terms of
revisions of the items present) of a working copy. - svnlook
A tool for directly inspecting a Subversion repository. - svnadmin
A tool for creating, tweaking or repairing a Subversion
repository. - svndumpfilter
A program for filtering Subversion repository dump
streams. - mod_dav_svn
A plug-in module for the Apache HTTP Server, used to
make your repository available to others over a
network. - svnserve
A custom standalone server program, runnable as a
daemon process or invokable by SSH; another way to make
your repository available to others over a network. - svnsync
A program for incrementally mirroring one
repository to another over a network.
Assuming you have Subversion installed correctly, you should
be ready to start. The next two chapters will walk you through
the use of svn, Subversion's command-line client
program.
The Version Control with Subversion book is licensed under the Creative Commons Attribution License v2.0.
To submit comments, corrections, or other contributions to the text, please visit http://www.svnbook.com.
|