Navigation
  • Home
  • Recent
  • Most Active
  • Popular
  • Blog
  • Credits
  • RSS
  •   Interaction
  • Register
  • Statistics
  •   Help
  • Suggestions
  • Contact Us
  • How to Edit
  • Help



  • [Edit]




    Subversion is an open source application used for revision control. It is sometimes abbreviated to svn in reference to the name of its command line interface. Subversion is designed specifically to be a modern replacement for CVS and shares a number of the same key developers.


        Subversion
            Features
                Repository access
            Layers
            Filesystem
            Properties
            Branching and tagging
            Current issues
            Users
            License
                graphical user interface|GUI front-ends/clients
                Other related software
            See also
    NameSubversion
    LogoImage:Subversion.png
    DeveloperCollabNet, Inc.
    Latest Release Version1.4.0
    Latest Release Date2006-09-10
    Operating SystemLinux, Microsoft Windows
    GenreRevision control
    LicenseApache license

    top

    Features

      Commits are truly 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 are versioned. Entire directory trees can be moved around and/or copied very quickly, and retain full revision history.
      Native support for binary files, with space-efficient binary-diff storage.
      Client/server protocol sends diffs in both directions.
      Costs are proportional to change size, not data size.
      File locking for unmergeable files ("reserved checkouts").
      Path-based authorization for svnserve.
      Full MIME 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.

    top

    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.
      WebDAV/DeltaV (over http or https) using the mod_dav_svn module for Apache 2.
      Custom "svn" protocol, either plaintext or over SSH.

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

    top

    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/DeltaV access through Apache 2.

    Ra
    Handles "repository access", both local and remote. From this point on, repositories are referred to using URL's i.e file:///path/ for local access, http://host/path/ (or https) for WebDAV access, or svn://host/path/ (or svn+ssh) for the SVN protocol.

    Client, Wc
    The highest level. It abstracts repository access and provides common client tasks e.g authenticating the user, comparing versions. The Wc library is used by Client to manage the local working copy.


    top

    Filesystem

    The Subversion filesystem is described as a "three dimensional" filesystem. Since most representations of a directory tree (e.g tree view) are two dimensional, the added dimension is that of revisions. Each revision in a Subversion filesystem has its own root, 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 equivalent to the changes made, not 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. The transaction 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. A client can begin a transaction, exit, and then another client (perhaps the same program) can re-open the transaction and continue using it.

    top

    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-hosted working copies executable.

    svn:mime-type
    Stores the MIME 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'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 a file is needed with a specific EOL style in an environment with mixed systems.

    svn:externals
    Allows parts of other repositories to be automatically checked-out into a sub-directory.

    svn:needs-lock
    Specifies that a file needs an explicit lock to be taken out on it before being modified, stopping other people from modifying it at the same time.

    svn:special
    This property isn't meant to be set or modified directly by users. Currently only used for having symbolic links in the repository. When a symbolic link is added to the repository, an empty file is created with this property. 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).


    top

    Branching and tagging

    Unlike CVS, Subversion does not handle branches or tags (releases) itself. These features are instead achieved using different paths within the repository and simply copying trees of files and directories between these paths. These copies are made using the 'svn copy' command, not the native operating system mechanism. Because Subversion implements file copies, the copied files retain the full history of the original file. They also take up little extra room in the repository.

    For example, the recommended repository for a project looks something like this:
      project/
        trunk/
        branches/
          new-interface/
          windows-port/
        tags/
          version-1.0/
          version-1.1/
          version-2.0/

    It is not intended that someone check-out the entire project tree, instead only checking out the trunk or one of the branches or tags. The trunk directory holds the main copy of this project, called the 'HEAD' branch in CVS. The branches directory holds versions of the project that a developer or group of developers may be working on. They allow changes to be checked into the repository and shared with others, without possibly introducing problems into the trunk. The changes can be merged into the trunk or other branches. The tags directory contains snapshots of the trunk at particular milestones, usually major releases or perhaps prior to a major departure in development.

    The branches and tags were made by simply copying the trunk to the new paths. All the files 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 or between branches. To Subversion, the only difference between tags and branches is that changes should not be checked into the tagged versions.

    top

    Current issues


    A number of issues with Subversion have been identified by the developers as well as users.

      No atomic 'move' or 'rename' operation. As of version 1.4, Subversion currently implements moving (or renaming) of files with two operations on the same atomic transaction: a 'copy' to the new name followed by a 'delete' of the old name.
      Subversion currently lacks proper repository administration and management tools. That is, while it is very capable when data is added to the repository, it is much less capable at managing the repository as a whole. For instance, it is sometimes necessary to permanently edit the repository to change the structure in which versions are held or to permanently remove data that was checked into the repository in error. Subversion does not have tools which allow this to be done. The check-in level tools allow files and directories to be moved or deleted but earlier revisions will always hold the data in the old structure or hold the file that was deleted. The current solution to this sort of problem involves 'dumping' the repository, editing the resulting (possibly large) text file, and then recreating the repository. For simple renaming or removal of files this is fairly straight-forward, but other alterations can be more complex and hence error-prone.

    These and other issues are described in the Subversion roadmap.

    top

    Users
    Although as of 2006 Subversion is less widely used than the traditional CVS, adoption is increasing, and it is perhaps the most popular alternative. Projects using Subversion include the Apache Software Foundation, KDE, GCC, , Python, Samba, Mono, PuTTY, Zope, Xiph, GnuPG, CUPS, Wireshark, TWiki, Ruby on Rails, and many others. Many projects have migrated to Subversion due to the comprehensive project management solution Trac, which originally required Subversion. SourceForge now also provides Subversion hosting for its open source projects, and the new Google Code uses it exclusively.

    top

    License
    Subversion is distributed under an Apache/BSD-style license. Some have criticized the license for being incompatible with the GPL version 2, although version 3 of the GPL is expected to solve the problem.

    top

    graphical user interface|GUI front-ends/clients
      AnkhSVN is a Visual Studio .NET addin. It allows you to perform the most common Subversion operations from directly inside the VS.NET IDE.
      eSvn, a Qt-based Subversion client.
      gsvn, mostly abandoned by its original authors, due to lack of time; written entirely in python, using GTK+. There is a new project developed in C
      kdesvn, another Subversion client for KDE.
      QSvn, another Qt-based Subversion client.
      VisualSVN - simple and reliable Subversion integration for Visual Studio 2003 & 2005.
      WebSVN, a PHP based web interface of Subversion repositories.
      sventon, a pure Java Subversion repository web browser (open source).

    top

    Other related software
      CIA is a piece of software that notifies people of repository activity. It is named after the CIA because its role is to "keep an eye on subversion".
      FSVS - versions complete filesystems or directories (including modification time, owner, group and access-mode) into a subversion repository.
      GForge is an open source project that integrates Subversion with bug tracking, messaging, project hosting.
      JavaSVN is an open source project that is a 100% pure Java Subversion client library.
      SVN Importer is a free tool for importing content from other version control systems to a Subversion (SVN) repository
      svnmerge, which helps keep track of what changes what merges have and have not occurred on branches.
      SVNManager, SVNManager is a webbased tool to administer a Unix Apache WebDAV Subversion repository server.
      SVN 1-Click Setup is an installer for setting up a Subversion repository on Windows.
      SVN2Log, SVN2Log generates changelogs from Subversion repository.

    top

    See also
      SVK - which is compatible with SVN repositories, and avoids the annoyingly large .svn metadata directories in the working copy
      SourceHaven - ports Subversion to an Oracle database and adds a web application for administration
     
    Search more:
     

       
    Source Privacy License Download Contact Us Atlas
    Scientus.org Dictionary (Yet Another Wiki) RC : 1.39
    This article is licensed under the GNU Free Documentation License [copyleft]. It uses material from the Wikipedia article "Subversion". link