blob: 957bdccca48704631b532f50c85e5a7860df7a28 [file] [log] [blame]
<TABLE BORDER="0" CELLPADDING="2" WIDTH="98%" BGCOLOR="white">
<TR>
<TD WIDTH="100%" BGCOLOR="yellow">
<font color="red">
<b>
Please read <a href="/getting_subversion.html">Getting Subversion</a>
if you want to install Subversion. We recommend you join the <a
href="/servlets/ProjectMailingListList">users@subversion.tigris.org</a>
mailing list, and read the <a
href="http://svnbook.red-bean.com/">Subversion Book</a> and <a
href="/project_faq.html">FAQ</a>. You can also ask questions on IRC
at <b><tt>irc.freenode.net</tt></b>, channel <b><tt>#svn</tt></b>. To
find out how other people are using Subversion, see our list of <a
href="svn-repositories.html">Subversion Repositories On The Net</a>, and
the list of <a href="/project_links.html">related tools,
converters and clients</a>.
</b>
</font>
</TD>
</TR>
</table>
<h3>What Is Subversion?</h3>
<table BORDER="0" CELLPADDING="2" WIDTH="98%" BGCOLOR="white">
<TR>
<TD WIDTH="100%" HEIGHT="100" BGCOLOR="#f0f0f0">
<p>
The goal of the Subversion project is to build a version control
system that is a compelling replacement for CVS in the open source
community. The software is released under an <a
href="/license-1.html">Apache/BSD-style</a> open source license.
See the <a href="/project_status.html">status page</a> for current
progress.
</p>
<p>
<center>
<img src="/subversion_logo_hor-468x64.png" alt="Subversion"
width="468" height="64" align="center"/>
</center>
</p>
<p>
<h2>Features of Subversion</h2>
<p>
<ul> <!-- list of features -->
<li><strong>Most current CVS features.</strong>
<p>Subversion is meant to be a better CVS, so it will have most of
CVS's features, with as many as possible in the 1.0 release.
Generally, Subversion's interface to a particular feature is
similar to CVS's, except where there's a compelling reason to do
otherwise.</p>
</li>
<li><strong>Directories, renames, and file meta-data are versioned.</strong>
<p>Lack of these features is one of the most common complaints
against CVS. Subversion versions not only file contents and file
existence, but also directories, copies, and renames. It also
allows arbitrary metadata ("properties") to be versioned along
with any file or directory, and provides a mechanism for
versioning the `execute' permission flag on files.
</p>
</li>
<li><strong>Commits are truly atomic.</strong>
<p>No part of a commit takes effect until the entire commit has
succeeded. Revision numbers are per-commit, not per-file; log
messages are attached to the revision, not stored redundantly as
in CVS.</p>
</li>
<li><strong>Apache as network server, WebDAV/DeltaV for protocol
(separate standalone server also available)</strong> <p>Subversion
uses the HTTP-based WebDAV/DeltaV protocol for network
communications, and uses the Apache web server to provide
repository-side network service. This gives Subversion a big
advantage in stability and interoperability, and provides various
key features for free: authentication, basic authorization, wire
compression, and repository browsing, for example. For people
who simply want to tunnel a custom protocol over ssh, Subversion
also has a basic standalone server process.</p>
</li>
<li><strong>Branching and tagging are cheap (constant time) operations</strong>
<p>There is no reason for these operations to be expensive, so
they aren't.</p>
<p>Branches and tags are both implemented in terms of an
underlying "copy" operation. A copy takes up a small, constant
amount of space. Any copy is a tag; and if you start committing
on a copy, then it's a branch as well. (This does away with CVS's
"branch-point tagging", by removing the distinction that made
branch-point tags necessary in the first place.)</p>
</li>
<li><strong>Natively client/server, layered library design</strong>
<p> Subversion is designed to be client/server from the beginning;
thus avoiding some of the maintenance problems which have plagued
CVS. The code is structured as a set of modules with well-defined
interfaces, designed to be called by other applications.</p>
</li>
<li><strong>Client/server protocol sends diffs in both directions</strong>
<p>The network protocol uses bandwidth efficiently by transmitting
diffs in both directions whenever possible (CVS sends diffs from
server to client, but not client to server).</p>
</li>
<li><strong>Costs are proportional to change size, not data size</strong>
<p>In general, the time required for an Subversion operation is
proportional to the size of the <i>changes</i> resulting from that
operation, not to the absolute size of the project in which the
changes are taking place. This is a property of the Subversion
repository model.</p>
</li>
<li><strong>Efficient handling of binary files</strong>
<p>Subversion is equally efficient on binary as on text files,
because it uses a binary diffing algorithm to transmit and store
successive revisions.</p>
</li>
<li><strong>Parseable output</strong>
<p>All output of the Subversion command-line client is carefully
designed to be both human readable and automatically parseable;
scriptability is a high priority.
</p>
</li>
</ul> <!-- end list of features -->
<p>
<h2>Features planned for after 1.0</h2>
<p>
<ul>
<li><strong>Support for symbolic links</strong>
<p>Subversion will handle symbolic links ("shortcuts"). It may
also support multiple hard links and other special file types, as
long as this can be done portably and with semantics that are
compatible with version control.</p>
</li>
<li><strong>Better merge support</strong>
<p>Improved support for selective merges from related lines of
development, and for repeated merges. (Currently,
Subversion's merge support is essentially the same as
CVS's.)</p>
</li>
<li><strong>Broader WebDAV compatibility</strong>
<p>Currently, the Subversion server only responds to a subset of
WebDAV requests -- the subset necessary to support Subversion's
own functionality. Increased support for WebDAV is a high
priority after the 1.0 release, however.</p>
</li>
<li><strong>Support for plug-in client side diff programs</strong>
<p>Subversion knows how to show diffs for text files, and later
will also give the user the option to plug in external diff
programs for any kind of file. The external program need merely
conform to some simple invocation interface (i.e., "<tt>diffprog
file1 file2 [file3...]</tt>", where the various files might be
different revisions of the same file).</p>
</li>
<li><strong>Internationalization</strong>
<p>Subversion will have I18N support -- commands, user messages, and
errors can be customized to the appropriate human language at
build-time. Also, there will be I18N support for the <i>names</i>
as well as the contents of versioned entities.
</li>
<li><strong>Progressive multi-lingual support</strong>
<p>In order to support keyword expansion and platform-dependent
line-ending conversion, CVS makes a distinction between text and
binary files, and treats the text files specially.</p>
<p>Subversion makes the same distinction, but will offer a more
generous notion of what constitutes a text file: not only ASCII,
but UTF-* encodings of Unicode too. UTF-8 is the first priority,
with other encodings following if needed.</p>
</li>
</ul>
<br>
</table>
<p>
<center>
<a href="http://www.linux-magazin.de/Artikel/ausgabe/2003/12/award/award.html">
<img src="images/LnmAwardLogo.jpg"
alt="Linux New Media Award -- Newcomer of the Year"
align="center"/>
</a>
</center>
</p>
<P>