All Topics  
Subversion

 

   Email Print
   Bookmark   Link






 

Subversion



 
 
Subversion (SVN) is a version control
Revision control

Revision control is the management of multiple revisions of the same unit of information. It is most commonly used in engineering and software development to manage ongoing development of digital documents like application source code, art resources such as blueprints or electronic models, and other projects that may be worked on by a team o...
 system initiated in 2000 by CollabNet
CollabNet

CollabNet is a company that sells collaboration software for software development teams, especially those geographically distributed or spread across different companies....
 Inc. It is used to maintain current and historical versions of files such as source code
Source code

In computer science, source code is any collection of statements or declarations written in some human-readable computer programming language....
, web pages, and documentation. Its goal is to be a mostly-compatible successor to the widely used Concurrent Versions System
Concurrent Versions System

In the field of software development, the Concurrent Versions System , also known as the Concurrent Versioning System, is a free software revision control system....
 (CVS).

Subversion is well-known in the open source community and is used on many open source projects, including Apache Software Foundation
Apache Software Foundation

The Apache Software Foundation is a non-profit corporation to support Apache software projects, including the Apache HTTP Server. The ASF was formed from the Apache Group and Delaware corporation, USA, in June 1999....
, KDE
KDE

KDE is a free software project based around its flagship product, a desktop environment for Unix-like systems. The goal of the project is to provide basic desktop functions and applications for daily needs as well as tools and documentation for developers to write stand-alone applications for the system....
, GNOME
Gnome

A gnome is a mythical creature characterized by its extremely small size and wiktionary:subterranean lifestyle. The word gnome is derived from the New Latin gnomus....
, Free Pascal
Free Pascal

Free Pascal is a free software, Portability , open source, Pascal programming language and Object Pascal compiler. The 32/64-bit multi-CPU architecture and cross-platform compiler implements the Borland Pascal programming language dialects as well as some MacPascal constructs, and is available for...
, FreeBSD
FreeBSD

FreeBSD is a Unix-like free software operating system descended from AT&T Unix via the Berkeley Software Distribution branch through the 386BSD and Berkeley Software Distribution#4.4BSD and descendants operating systems....
, GCC
GNU Compiler Collection

The GNU Compiler Collection is a compiler system produced by the GNU Project supporting various programming languages. GCC is a key component of the GNU toolchain....
, Python
Python (programming language)

Python is a general-purpose high-level programming language. Its design philosophy emphasizes code readability. Python's core syntax and semantics are Minimalism , while the standard library is large and comprehensive....
, Django, Ruby
Ruby (programming language)

Ruby is a dynamic programming language, reflection , general purpose object-oriented programming language that combines syntax inspired by Perl with Smalltalk-like features....
, Mono
Mono (software)

Mono is a project led by Novell to create an Ecma International standard compliant, .NET Framework-compatible set of tools, including among others a C Sharp compiler and a Common Language Runtime....
, SourceForge.net
SourceForge.net

SourceForge.net is a source code repository. It acts as a centralized location for software developers to control and manage open source software development....
, ExtJS and Tigris.org
Tigris.org

Tigris.org is an open source software development community. It hosts software development services such as web hosting, mailing lists, issue tracking, and Subversion revision control....
.






Discussion
Ask a question about 'Subversion'
Start a new discussion about 'Subversion'
Answer questions from other users
Full Discussion Forum



Encyclopedia


Subversion (SVN) is a version control
Revision control

Revision control is the management of multiple revisions of the same unit of information. It is most commonly used in engineering and software development to manage ongoing development of digital documents like application source code, art resources such as blueprints or electronic models, and other projects that may be worked on by a team o...
 system initiated in 2000 by CollabNet
CollabNet

CollabNet is a company that sells collaboration software for software development teams, especially those geographically distributed or spread across different companies....
 Inc. It is used to maintain current and historical versions of files such as source code
Source code

In computer science, source code is any collection of statements or declarations written in some human-readable computer programming language....
, web pages, and documentation. Its goal is to be a mostly-compatible successor to the widely used Concurrent Versions System
Concurrent Versions System

In the field of software development, the Concurrent Versions System , also known as the Concurrent Versioning System, is a free software revision control system....
 (CVS).

Subversion is well-known in the open source community and is used on many open source projects, including Apache Software Foundation
Apache Software Foundation

The Apache Software Foundation is a non-profit corporation to support Apache software projects, including the Apache HTTP Server. The ASF was formed from the Apache Group and Delaware corporation, USA, in June 1999....
, KDE
KDE

KDE is a free software project based around its flagship product, a desktop environment for Unix-like systems. The goal of the project is to provide basic desktop functions and applications for daily needs as well as tools and documentation for developers to write stand-alone applications for the system....
, GNOME
Gnome

A gnome is a mythical creature characterized by its extremely small size and wiktionary:subterranean lifestyle. The word gnome is derived from the New Latin gnomus....
, Free Pascal
Free Pascal

Free Pascal is a free software, Portability , open source, Pascal programming language and Object Pascal compiler. The 32/64-bit multi-CPU architecture and cross-platform compiler implements the Borland Pascal programming language dialects as well as some MacPascal constructs, and is available for...
, FreeBSD
FreeBSD

FreeBSD is a Unix-like free software operating system descended from AT&T Unix via the Berkeley Software Distribution branch through the 386BSD and Berkeley Software Distribution#4.4BSD and descendants operating systems....
, GCC
GNU Compiler Collection

The GNU Compiler Collection is a compiler system produced by the GNU Project supporting various programming languages. GCC is a key component of the GNU toolchain....
, Python
Python (programming language)

Python is a general-purpose high-level programming language. Its design philosophy emphasizes code readability. Python's core syntax and semantics are Minimalism , while the standard library is large and comprehensive....
, Django, Ruby
Ruby (programming language)

Ruby is a dynamic programming language, reflection , general purpose object-oriented programming language that combines syntax inspired by Perl with Smalltalk-like features....
, Mono
Mono (software)

Mono is a project led by Novell to create an Ecma International standard compliant, .NET Framework-compatible set of tools, including among others a C Sharp compiler and a Common Language Runtime....
, SourceForge.net
SourceForge.net

SourceForge.net is a source code repository. It acts as a centralized location for software developers to control and manage open source software development....
, ExtJS and Tigris.org
Tigris.org

Tigris.org is an open source software development community. It hosts software development services such as web hosting, mailing lists, issue tracking, and Subversion revision control....
. Google Code
Google Code

Google Code is Google's site for developers interested in Google-related/open-source software development. The site contains open source code and a list of their services which support public APIs....
 also provides Subversion hosting for their open source projects. BountySource
BountySource

BountySource is a collaborative project management service for use by any open-source software with an Open Source Initiative-approved license. Like other free services and products , BountySource allows for developers to track bugs and feature requests....
 systems use it exclusively. Codeplex offers access to both subversion as well as other types of clients.

Subversion is also being adopted in the corporate world. In a 2007 report by Forrester Research
Forrester Research

Forrester Research is an independent technology and market research company that provides its clients with advice about technology's impact on business and consumers....
, Subversion was recognized as the sole leader in the Standalone Software Configuration Management (SCM) category and a strong performer in the Software Configuration and Change Management (SCCM) category.

Subversion is released under the Apache License
Apache License

The Apache License is a free-software license authored by the Apache Software Foundation . The Apache License requires preservation of the copyright notice and disclaimer, but it is not a copyleft license — it allows use of the source code for the development of free software and open source software as well as proprietary software....
, making it free software
Free software

Free Software or software libre is software that can be used, studied, and modified without restriction, and which can be copied and redistributed in modified or unmodified form either without restriction, or with minimal restrictions only to ensure that further recipients can also do these things and to prevent consumer-facing hardware...
.

History


Subversion was started in 2000 as an effort to write a free
Free software

Free Software or software libre is software that can be used, studied, and modified without restriction, and which can be copied and redistributed in modified or unmodified form either without restriction, or with minimal restrictions only to ensure that further recipients can also do these things and to prevent consumer-facing hardware...
 version control system which operated much like CVS
Concurrent Versions System

In the field of software development, the Concurrent Versions System , also known as the Concurrent Versioning System, is a free software revision control system....
 but with fixed bugs and misfeatures in CVS. By 2001, Subversion was sufficiently developed to be capable of hosting its own source code.

Features


  • Commits
    Commit (data management)

    In the context of computer science and data management, commit refers to the idea of making a set of tentative changes permanent. A popular usage is at the end of a database transaction....
     are true atomic operations. Interrupted commit operations do not cause repository inconsistency or corruption.
  • Renamed/copied/moved/removed files retain full revision history.
  • Directories, renames, and file metadata
    Metadata

    Metadata is "data about other data", of any sort in any media. An item of metadata may describe an individual datum, or content item, or a collection of data including multiple content items and hierarchical levels, for example a database schema....
     (but not timestamps) are versioned. Entire directory trees can be moved around and/or copied very quickly, and retain full revision history.
  • Versioning of symbolic link
    Symbolic link

    In computing, a symbolic link is a special type of computer file that contains a reference to another file or directory in the form of an absolute or relative path and that affects pathname resolution....
    s.
  • Native support for binary files, with space-efficient binary-diff storage.
  • Apache HTTP Server
    Apache HTTP Server

    The Apache HTTP Server, commonly referred to simply as Apache , is a web server notable for playing a key role in the initial growth of the World Wide Web....
     as network server, WebDAV
    WebDAV

    Web-based Distributed Authoring and Versioning, or WebDAV, is a set of extensions to the Hypertext Transfer Protocol that allows users to collaboratively edit and manage files on remote World Wide Web servers....
    /DeltaV for protocol
    Protocol (computing)

    In computer science, a protocol is a convention or standard that controls or enables the connection, communication, and data transfer between computing endpoints....
    . There is also an independent server process
    Process (computing)

    In computing, a process is an Object of a computer program that is being sequentially executed by a computer system that has the ability to run several computer programs Concurrency ....
     that uses a custom protocol over TCP/IP.
  • Branching
    Branching (software)

    Branching, in revision control and software configuration management, is the duplication of an object under revision control so that modifications can happen in parallel along both branches....
     and tagging
    Revision tag

    A revision tag is the term often used to define a textual label that can be associated with a specific revision of a project maintained by a version control system....
     are cheap operations, independent of file size, though Subversion itself does not distinguish between a tag, a branch, and a directory
  • Natively client/server
    Client-server

    The client-server software architecture model distinguishes client systems from server systems, which communicate over a computer network. A client-server application is a distributed system comprising both client and server software....
    , layer
    Abstraction layer

    An abstraction layer is a way of hiding the implementation details of a particular set of functionality. Software models that use layers of abstraction include the OSI model for computer network Protocol , the OpenGL graphics drawing library, and the byte stream input/output model originated by Unix and adopted by MSDOS, Linux, and most ot...
    ed library design.
  • Client/server protocol sends diff
    Diff

    In computing, diff is a file comparison utility that outputs the differences between two files, or the changes made to a current file by comparing it to a former version of the same file....
    s in both directions.
  • Costs are proportional to change size, not data size.
  • Parsable
    Parsing

    In computer science and linguistics, parsing, or, more formally, syntactic analysis, is the process of analyzing a sequence of lexical analysis#Token to determine their grammatical structure with respect to a given formal grammar....
     output, including XML log output.
  • Open source
    Open source

    Open source is an approach to design, development, and distribution offering practical accessibility to a product's source . Some consider open source as one of various possible design approaches, while others consider it a critical Strategy element of their business operations....
     licensed — "CollabNet
    CollabNet

    CollabNet is a company that sells collaboration software for software development teams, especially those geographically distributed or spread across different companies....
    /Tigris.org
    Tigris.org

    Tigris.org is an open source software development community. It hosts software development services such as web hosting, mailing lists, issue tracking, and Subversion revision control....
     Apache-style license"
  • Internationalized
    Internationalization and localization

    In computing, internationalization and localization are means of adapting computer software to different languages and regional differences. Internationalization is the process of designing a software application so that it can be adapted to various languages and regions without engineering changes....
     program messages.
  • File locking for unmergeable files ("reserved checkouts").
  • Path-based authorization.
  • PHP
    PHP

    PHP is a scripting language originally designed for producing dynamic web pages. It has evolved to include a command line interface capability and can be used in Standalone software Graphical user interface....
    , Python
    Python (programming language)

    Python is a general-purpose high-level programming language. Its design philosophy emphasizes code readability. Python's core syntax and semantics are Minimalism , while the standard library is large and comprehensive....
    , Perl
    Perl

    In computer programming, Perl is a high-level programming language, List of programming languages by category, Interpreter , dynamic programming language....
    , and Java
    Java (programming language)

    Java is a programming language originally developed by James Gosling at Sun Microsystems and released in 1995 as a core component of Sun Microsystems' Java ....
     language binding
    Language binding

    In computing, a Binding from a language to a library or operating system service is an Application programming interface providing that service in the language....
    s.
  • Full MIME
    MIME

    Multipurpose Internet Mail Extensions is an Internet standard that extends the format of electronic mail to support:* Text in character sets other than ASCII...
     support - the MIME Type of each file can be viewed or changed, with the software knowing which MIME types can have their differences from previous versions shown.


Repository types


Subversion offers two types of repository storage — FSFS and Berkeley DB
Berkeley DB

Berkeley DB is a computer software Library that provides a high-performance embedded database, with Binding in C , C++, Java , Perl, Python , Ruby , Tcl, Smalltalk, and many other programming languages....
. FSFS works faster on directories with a large number of files and takes less disk space, due to less logging. Subversion has some limitations with Berkeley DB
Berkeley DB

Berkeley DB is a computer software Library that provides a high-performance embedded database, with Binding in C , C++, Java , Perl, Python , Ruby , Tcl, Smalltalk, and many other programming languages....
 usage leading to repository corruption and data loss when a program that accesses the database crashes or was terminated forcibly. When using Berkeley DB
Berkeley DB

Berkeley DB is a computer software Library that provides a high-performance embedded database, with Binding in C , C++, Java , Perl, Python , Ruby , Tcl, Smalltalk, and many other programming languages....
 repository, the only way to use it safely is on the dedicated server and by a single server process running as one user, according to Version Control with Subversion. Existing tools for Berkeley DB
Berkeley DB

Berkeley DB is a computer software Library that provides a high-performance embedded database, with Binding in C , C++, Java , Perl, Python , Ruby , Tcl, Smalltalk, and many other programming languages....
 repository recovery aren't completely reliable, so frequent repository backups are needed.

Repository access


As of version 1.4, Subversion repositories can be accessed by the following means:

  • Local filesystem or network filesystem, accessed by client directly. This mode uses the file:///path access scheme.
  • WebDAV
    WebDAV

    Web-based Distributed Authoring and Versioning, or WebDAV, is a set of extensions to the Hypertext Transfer Protocol that allows users to collaboratively edit and manage files on remote World Wide Web servers....
    /DeltaV (over http or https) using the mod_dav_svn module for Apache 2
    Apache HTTP Server

    The Apache HTTP Server, commonly referred to simply as Apache , is a web server notable for playing a key role in the initial growth of the World Wide Web....
    . This mode uses the https://host/path access scheme.
  • Custom "svn" protocol (default port 3690), using plain text or over SSH
    Secure Shell

    Secure Shell or SSH is a network protocol that allows data to be exchanged using a secure channel between two networked devices. Used primarily on Linux and Unix based systems to access shell accounts, SSH was designed as a replacement for TELNET and other Computer security remote Shell s, which send information, notably passwords, in...
    . This mode uses either the svn://host/path access scheme for unencrypted transport or svn+ssh://host/path scheme for tunneling over ssh.


All three means can access both FSFS and Berkeley DB
Berkeley DB

Berkeley DB is a computer software Library that provides a high-performance embedded database, with Binding in C , C++, Java , Perl, Python , Ruby , Tcl, Smalltalk, and many other programming languages....
 repositories.

Subversion clients in Version 1.5 support access to WebDAV
WebDAV

Web-based Distributed Authoring and Versioning, or WebDAV, is a set of extensions to the Hypertext Transfer Protocol that allows users to collaboratively edit and manage files on remote World Wide Web servers....
/DeltaV (over http or https) subversion servers in Version 1.4. or later.

Layers


Subversion is composed internally of several libraries arranged as layers. Each performs a specific task and allows developers to create their own tools at the desired level of complexity and specificity.

Fs : The lowest level; it implements the versioned filesystem which stores the user data. Repos : Concerned with the repository built up around the filesystem. It has many helper functions and handles the various 'hooks' that a repository may have, e.g. scripts that are run when an action is performed. Together, Fs and Repos constitute the "filesystem interface". mod_dav_svn : Provides WebDAV
WebDAV

Web-based Distributed Authoring and Versioning, or WebDAV, is a set of extensions to the Hypertext Transfer Protocol that allows users to collaboratively edit and manage files on remote World Wide Web servers....
/Delta-V access through Apache 2. Ra : Handles "repository access", both local and remote. From this point on, repositories are referred to using URLs, e.g.
  • file:///path/ for local access,
  • http://host/path/ or https://host/path/ for WebDAV access, or
  • svn://host/path/ or svn+ssh://host/path/ for the SVN protocol.
Client, Wc : The highest level. It abstracts repository access and provides common client tasks, e.g. authenticating the user, or comparing versions. The Wc library is used by Client to manage the local working copy.

Filesystem

The Subversion filesystem can be described as "three dimensional". In addition to the two dimensions of a standard directory tree (e.g., tree view
Tree view

A tree view or an outline view is a graphical user interface element that presents a hierarchy#Containment hierarchy view of information....
), the Subversion filesystem's third dimension is revisions. Each revision in a Subversion filesystem has its own root
Root directory

In computing file systems, the root directory is the first or top-most directory in a hierarchy. It can be likened to the root of a tree - the starting point where all branches originate....
, which is used to access contents at that revision. Files are stored as links to the most recent change; thus a Subversion repository is quite compact. The storage space used is proportional to the number of changes made, not to the number of revisions.

The Subversion filesystem uses transactions to keep changes atomic. A transaction is begun from a specified revision of the filesystem, not necessarily the latest. The transaction has its own root, on which changes are made. It is then either committed and becomes the latest revision, or is aborted. The transaction is actually a long-lived filesystem object; a client does not need to commit or abort a transaction itself, rather it can also begin a transaction, exit, and then can re-open the transaction and continue using it. Multiple clients can access the same transaction and work together on an atomic change.

Properties


One important feature of the Subversion filesystem is properties, simple name=value pairs of text. Properties are used in two different places in the Subversion filesystem. The first is on filesystem entries (i.e., files and directories). These are versioned just like other changes to the filesystem. Users can add any property they wish, and the Subversion client uses a set of properties, which it prefixes with 'svn:'.

svn:executable : Makes files on Unix
Unix

Unix is a computer operating system originally developed in 1969 by a group of American Telephone & Telegraph employees at Bell Labs, including Ken Thompson , Dennis Ritchie, Douglas McIlroy, and Joe Ossanna....
-hosted working copies executable. svn:mime-type : Stores the MIME
MIME

Multipurpose Internet Mail Extensions is an Internet standard that extends the format of electronic mail to support:* Text in character sets other than ASCII...
 type of a file. Affects the handling of diffs and merging. svn:ignore : A list of filename patterns to ignore in a directory. Similar to CVS
Concurrent Versions System

In the field of software development, the Concurrent Versions System , also known as the Concurrent Versioning System, is a free software revision control system....
's .cvsignore file. svn:keywords : A list of keywords to substitute into a file when changes are made. The keywords must also be referenced in the file as $keyword$. This is used to maintain certain information (e.g date of last change, revision number) in a file without human intervention. svn:eol-style : Makes the client convert end-of-line characters in text files. Used when the working copy is needed with a specific EOL style. "native" is commonly used, so that EOL's match the user's OS EOL style. Repositories may require this property on all files to prevent inconsistent line endings, which can be a problem in itself. svn:externals : Allows parts of other repositories to be automatically checked-out into a sub-directory. svn:needs-lock : Specifies that a file is to be checked out with file permissions set to read-only. This is designed to be used with the locking mechanism. The read-only permission is a reminder to obtain a lock before modifying the file: obtaining a lock makes the file writable, and releasing the lock makes it read-only again. Locks are only enforced during a commit operation. Locks can be used without setting this property. However, that is not recommended, because it introduces the risk of someone modifying a locked file; they will only discover it has been locked when their commit fails. svn:special : This property isn't meant to be set or modified directly by users. Currently only used for having symbolic link
Symbolic link

In computing, a symbolic link is a special type of computer file that contains a reference to another file or directory in the form of an absolute or relative path and that affects pathname resolution....
s in the repository. When a symbolic link is added to the repository, a file containing the link target is created with this property set. When a Unix-like system checks out this file, the client converts it to a symbolic link.

The second place in Subversion where properties are used is on revisions themselves. Like the above properties on filesystem entries the names are completely arbitrary, with the Subversion client using certain properties prefixed with 'svn:'. However, these properties are not versioned and can be changed later.

svn:date : The date and time stamp of when the revision was made. svn:author : The name of the user that submitted the change(s). svn:log : The user-supplied description of the change(s).

Branching and tagging


Subversion uses the interfile branching model from Perforce
Perforce

Perforce is a commercial, proprietary revision control system developed by Perforce Software, Inc....
 to handle branches
Branching (software)

Branching, in revision control and software configuration management, is the duplication of an object under revision control so that modifications can happen in parallel along both branches....
 and tag
Revision tag

A revision tag is the term often used to define a textual label that can be associated with a specific revision of a project maintained by a version control system....
s. Branching is the ability to isolate changes onto a separate line of development. Tagging is the ability to associate additional information - such as a build environment - with a particular revision.

A new branch or tag is created with the 'svn copy' command, which should be used in place of the native operating system mechanism. Subversion does not create an entire new file version in the repository with its copy. Instead, the old and new versions are linked together internally and the history is preserved for both. The copied versions take up only a little extra room in the repository because Subversion saves only the differences from the original versions.

All the versions in each branch maintain the history of the file up to the point of the copy, plus any changes made since. Changes can be 'merged' back into the trunk
Trunk (software)

The trunk refers to the unnamed Branching of a file tree under revision control. The trunk is usually meant to be the base of a project on which development progresses....
 or between branches. To Subversion, the only difference between tags and branches is that changes should not be checked into the tagged versions. Due to the differencing algorithm, creating a tag or a branch takes very little additional space in the repository.

Current limitations and problems

The current version of Subversion only allows directory access control and lacks more granular file access control. That problem dramatically restricts the use of Subversion in projects where directories are not structured to address functional separation among various objects. For example, directories like lib, src, bin do not address security and access control in most cases.

A known problem in Subversion is the implementation of the file and directory rename operation. Subversion currently implements the renaming of files and directories as a 'copy' to the new name followed by a 'delete' of the old name. Only the names are changed, all data relating to the edit history remains the same, and Subversion will still use the old name in older revisions of the "tree". However, Subversion may be confused when files are modified and moved in the same commit. This can also cause problems when a move conflicts with edits made elsewhere. This problem was expected to be addressed in the Subversion 1.5 release, but only some use cases were addressed while the problems with some other use cases were postponed.

Subversion currently lacks some repository administration and management features. For instance, it is sometimes desired to make edits to the repository to permanently remove all historical records of certain data being in the repository. Subversion does not have built-in support to allow this to be done simply.

Subversion stores additional copies of data on the local machine, which can be an issue for very large projects or files, or if developers are working on multiple branches simultaneously. These .svn directories on the client side can become corrupted by ill-advised user activity.

Releases


CollabNet is still involved with Subversion but the project is run as an independent open source community. The home of Subversion is on Tigris.org
Tigris.org

Tigris.org is an open source software development community. It hosts software development services such as web hosting, mailing lists, issue tracking, and Subversion revision control....
, an open-source community dedicated to software engineering tools.

The Subversion open-source community does not provide binaries but these can be downloaded from volunteers and from CollabNet, the initiator of the Subversion project. While the Subversion project does not include an official graphical user interface
Graphical user interface

A graphical user interface is a type of user interface which allows people to human-computer interaction such as computers; hand-held devices such as MP3 Players, Portable Media Players or Gaming devices; household appliances and office equipment....
 (GUI) for use with Subversion, a number of different GUIs have been developed, along with a wide variety of additional ancillary software.

See also


  • List of revision control software
    List of revision control software

    This is a list of notable software for revision control....
  • Comparison of revision control software
    Comparison of revision control software

    The following tables compare general and technical information for notable revision control and software configuration management software. This article is not all-inclusive and may become out of date quickly....
  • Comparison of Subversion clients
    Comparison of Subversion clients

    Subversion has its own command-line client. Other clients are available, which are perhaps easier or more intuitive to use in different scenarios. Often, people have several clients installed, and use each for different tasks....
  • SVNKit
    SVNKit

    SVNKit is an Open Source, pure Java software Library for working with the Subversion version control system. It implements virtually all Subversion features and provides API to work with Subversion working copies, access and manipulate Subversion repositories....


Further reading
  • by Ben Collins-Sussman (Subversion developer), as of 2004-12-21


External links

  • , an O'Reilly
    O'Reilly Media

    O'Reilly Media is an American Mass media company established by Tim O'Reilly that publishes books and web sites and produces conferences on computer technology topics....
     book available for free online