| <html> |
| <head> |
| <title>subversion.tigris.org</title> |
| <link rel="stylesheet" type="text/css" |
| href="http://subversion.tigris.org/branding/css/tigris.css"/> |
| <link rel="stylesheet" type="text/css" |
| href="http://subversion.tigris.org/branding/css/inst.css"/> |
| <link rel="stylesheet" type="text/css" media="print" |
| href="http://subversion.tigris.org/branding/css/print.css"/> |
| <script type="text/javascript" |
| src="http://subversion.tigris.org/branding/scripts/tigris.js"></script> |
| </head> |
| |
| <body> |
| <div class="app"> |
| |
| <table border="0" cellpadding="2" width="98%" bgcolor="white"> |
| <tr> |
| <td width="100%" bgcolor="yellow"> |
| <font color="red"> |
| <b> |
| If you're using Subversion, we recommend that 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="/faq.html">FAQ</a>. You can also ask questions on IRC |
| at <tt><a href="irc://irc.freenode.net/">irc.freenode.net</a></tt>, |
| channel <tt><a href="irc://irc.freenode.net/svn">#svn</a></tt>. |
| </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="/project_license.html">Apache/BSD-style</a> open source license. |
| </p> |
| |
| <p> |
| <center> |
| <img src="/subversion_logo_hor-468x64.png" alt="Subversion" |
| width="468" height="64" align="center"/> |
| </center> |
| </p> |
| |
| <p> |
| <h2>Subversion's Features</h2> |
| <p> |
| |
| <ul> <!-- list of features --> |
| |
| <li><strong>Most current CVS features.</strong> |
| <p>Subversion is meant to be a better CVS, so it has most of |
| CVS's features. 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 network server option, with WebDAV/DeltaV |
| protocol.</strong> |
| <p>Subversion can use the HTTP-based WebDAV/DeltaV protocol for network |
| communications, and the Apache web server to provide |
| repository-side network service. This gives Subversion an |
| advantage over CVS in interoperability, and provides various key |
| features for free: authentication, path-based authorization, wire |
| compression, and basic repository browsing. </p> |
| </li> |
| |
| <li><strong>Standalone server option.</strong> |
| <p>Subversion also offers a standalone server option using a |
| custom protocol (not everyone wants to run Apache 2.x). The |
| standalone server can run as an inetd service, or in daemon mode, |
| and offers basic authentication and authorization. It can also be |
| tunnelled over ssh.</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 a 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>Choice of database or plain-file repository implementations</strong> |
| <p>Repositories can be created with either an embedded database |
| back-end (BerkeleyDB) or with normal flat-file back-end, which |
| uses a custom format.</p> |
| </li> |
| |
| <li><strong>Versioning of symbolic links</strong> |
| <p>Unix users can place symbolic links under version control. The |
| links are recreated in Unix working copies, but not in win32 |
| working copies.</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> |
| |
| <li><strong>Localized messages</strong> |
| <p>Subversion uses gettext() to display translated error, |
| informational, and help messages, based on current locale |
| settings.</p> |
| </li> |
| |
| </ul> |
| |
| <p> |
| <h2>Future Subversion Features</h2> |
| <p> |
| |
| <p>See the <a href="roadmap.html">Roadmap</a> page.</p> |
| |
| |
| <br> |
| </table> |
| |
| </div> |
| </body> |
| </html> |