|
|
|
|
Version Control with Subversion - Subversion's Features
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 2, Basic Concepts
, in which we provide a gentle introduction
to version control in general.
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.
[an error occurred while processing this directive]
|
|
|