Apache Subversion: Difference between revisions

Content deleted Content added
rv 67.170.211.205's addition of marketing language
m FSX: typography
 
Line 1:
{{Short description|Free and open-source software versioning and revision control system}}
{{dablink|For the political concept, see [[Subversion (politics)]].}}
{{Lead too short|date=October 2022}}
{{Infobox Software
{{Infobox software
| name = Subversion
| logoname = [[Image:Subversion.png|250px]]
| title = Apache Subversion
| screenshot =
| logo = Apache Subversion logo.svg
| caption =
| developerauthor = [[CollabNet, Inc.]]
| developer = [[Apache Software Foundation]]
| latest_release_version = 1.4.3
| released = {{Start date and age|2000|10|20|df=yes}}
| latest_release_date = [[2007]]-[[01-25]]
| latest release version = {{wikidata|property|preferred|references|edit|P348|P548=Q2804309}}
| latest_preview_version =
| latest release date = {{Start date and age|{{wikidata|qualifier|preferred|single|P348|P548=Q2804309|P577}}|df=yes}}
| latest_preview_date =
| ver layout = stacked
| operating_system = [[Linux]], [[FreeBSD]], [[Microsoft Windows|Windows]], [[Mac OS X]], [[AmigaOS]], [[i5/OS]]
| programming language = [[C (programming language)|C]]
| platform =
| operating system = {{hlist|[[Linux]]|[[FreeBSD]]|[[HP-UX]]|[[NetBSD]]|[[OpenBSD]]|[[OpenVMS]]|[[macOS]]|[[Solaris (operating system)|Solaris]]|[[Windows]]}}
| genre = [[Revision control]]
| genre = [[Revision control]]
| license = [[Apache license|Apache]]/[[BSD license|BSD]] Style
| license = [[Apache License|Apache-2.0]]{{efn|Apache-2.0 since 2009-07-07.}}
| website = [http://subversion.tigris.org/ Subversion Home]
}}
 
'''Apache Subversion''' (often abbreviated '''SVN''', after its command name ''svn'') is a [[version control]] system distributed as [[Open-source software|open source]] under the [[Apache License]].<ref>{{cite web |year=2020 |title=Subversion |url=https://directory.fsf.org/wiki/Subversion#tab=Details |access-date=3 October 2023 |website=directory.fsf.org |publisher=[[Free Software Directory]] |language=en-US}}</ref> Software developers use Subversion to maintain current and historical versions of files such as [[source code]], web pages, and documentation. Its goal is to be a mostly compatible successor to the widely used [[Concurrent Versions System]] (CVS).
'''Subversion''' is an [[open source]] application for [[revision control]]. Also commonly referred to as '''svn''' or '''SVN''', Subversion is designed specifically to be a modern replacement for [[Concurrent Versions System|CVS]] and shares a number of the same key developers.
 
The [[Open-source software|open source]] community has used Subversion widely: for example, in projects such as [[Apache Software Foundation]], [[FreeBSD]], [[SourceForge]], and from 2006 to 2019, [[GNU Compiler Collection|GCC]]. [[CodePlex]] was previously a common host for Subversion repositories.
== Features ==
 
* [[Commit (data management)|Commits]] are truly [[Atomicity|atomic]] operations. Interrupted commit operations do not cause repository inconsistency or corruption.
Subversion was created by [[CollabNet]] Inc. in 2000, and is now a top-level Apache project being built and used by a global community of contributors.<ref>{{Cite press release |date=2020-02-27 |title=The Apache Software Foundation Announces 20th Anniversary of Apache Subversion |url=https://www.globenewswire.com/news-release/2020/02/27/1991695/17401/en/The-Apache-Software-Foundation-Announces-20th-Anniversary-of-Apache-Subversion.html |access-date=2023-01-29 |website=GlobeNewswire News Room |language=en}}</ref>
* Renamed/copied/moved/removed files retain full revision history.
 
* Directories, renames, and file [[Metadata (computing)|metadata]] are versioned. Entire directory trees can be moved around and/or copied very quickly, and retain full revision history.
==History==
[[CollabNet]] founded the Subversion project in 2000 as an effort to write an open-source version-control system which operated much like [[Concurrent Versions System|CVS]] but which fixed the bugs and supplied some features missing in CVS.<ref name=bookhistory /> By 2001, Subversion had advanced sufficiently to [[Self-hosting (compilers)|host its own source code]],<ref name=bookhistory>{{cite web |url=https://svnbook.red-bean.com/en/1.7/svn.intro.whatis.html#svn.intro.history |work=Version Control with Subversion (for Subversion 1.7) |title=What is Subversion? > Subversion's History |author1=Collins-Sussman, Ben |author2=Brian W. Fitzpatrick |author3=C. Michael Pilato |year=2011 |access-date=15 March 2012}}</ref> and in February 2004, version 1.0 was released.<ref>{{cite web |url=https://lwn.net/Articles/72498/ |work=Linux Weekly News |title=subversion 1.0 is released |author=Benjamin Zeiss |year=2004 |access-date=30 March 2014}}</ref> In November 2009, Subversion was accepted into Apache Incubator: this marked the beginning of the process to become a standard top-level Apache project.<ref name=SDT2011>{{cite web |url=http://www.sdtimes.com/link/33886 |title=Subversion joins forces with Apache |author=Rubinstein, David |publisher=SD Times |date=4 November 2009 |access-date=15 March 2012 |archive-url=https://web.archive.org/web/20091111000653/http://www.sdtimes.com/SUBVERSION_JOINS_FORCES_WITH_APACHE/By_David_Rubinstein/About_APACHE_and_SUBVERSION/33886 |archive-date=2009-11-11}}</ref> It became a top-level Apache project on February 17, 2010.<ref>{{cite web |url=http://subversion.wandisco.com/component/content/article/1/43.html |archive-url=https://web.archive.org/web/20110512171259/http://subversion.wandisco.com/component/content/article/1/43.html |archive-date=12 May 2011 |title=Subversion is now Apache Subversion |date=18 February 2010 |access-date=15 March 2012}}</ref>
 
{| class="wikitable"
|-
! Version
! Original release date
! Latest version
! Latest release date
! Status
|-
| {{Version|o|1.0}}
| 2004-02-23
| 1.0.9
| 2004-10-13
| No longer supported
|-
| {{Version|o|1.1}}
| 2004-09-29<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.1.html |title=Subversion 1.1 Release Notes |access-date=2015-09-21}}</ref>
| 1.1.4
| 2005-04-01
| No longer supported
|-
| {{Version|o|1.2}}
| 2005-05-21<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.2.html |title=Subversion 1.2 Release Notes |access-date=2015-09-21}}</ref>
| 1.2.3
| 2005-08-19
| No longer supported
|-
| {{Version|o|1.3}}
| 2005-12-30<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.3.html |title=Subversion 1.3 Release Notes |access-date=2015-09-21}}</ref>
| 1.3.2
| 2006-05-23
| No longer supported
|-
| {{Version|o|1.4}}
| 2006-09-10<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.4.html |title=Subversion 1.4 Release Notes |access-date=2015-09-21}}</ref>
| 1.4.6
| 2007-12-21
| No longer supported
|-
| {{Version|o|1.5}}
| 2008-06-19<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.5.html |title=Subversion 1.5 Release Notes |access-date=2015-09-21}}</ref>
| 1.5.9
| 2010-12-06
| No longer supported
|-
| {{Version|o|1.6}}
| 2009-03-20<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.6.html |title=Apache Subversion 1.6 Release Notes |access-date=2015-09-21}}</ref>
| 1.6.23
| 2013-05-30
| No longer supported
|-
| {{Version|o|1.7}}
| 2011-10-11<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.7.html |title=Apache Subversion 1.7 Release Notes |access-date=2015-09-21}}</ref>
| 1.7.22
| 2015-08-12
| No longer supported
|-
| {{Version|o|1.8}}
| 2013-06-18<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.8.html |title=Apache Subversion 1.8 Release Notes |access-date=2015-09-21}}</ref>
| 1.8.19
| 2017-08-10
| No longer supported
|-
| {{Version|o|1.9}}
| 2015-08-05<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.9.html |title=Apache Subversion 1.9 Release Notes |access-date=2015-09-21}}</ref>
| 1.9.12
| 2019-07-24
| No longer supported
|-
| {{Version|o|1.10}}
| 2018-04-13<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.10.html |title=Apache Subversion 1.10 Release Notes |access-date=2018-04-17}}</ref>
| 1.10.8
| 2022-04-12
| No longer supported
|-
| {{Version|o|1.11}}
| 2018-10-30<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.11.html |title=Apache Subversion 1.11 Release Notes |access-date=2018-10-31}}</ref>
| 1.11.1
| 2019-01-11
| No longer supported
|-
| {{Version|o|1.12}}
| 2019-04-24<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.12.html |title=Apache Subversion 1.12 Release Notes |access-date=2019-05-01}}</ref>
| 1.12.2
| 2019-07-24
| No longer supported
|-
| {{Version|o|1.13}}
| 2019-10-30<ref>{{cite web|title=Apache Subversion 1.13 Release Notes|url=https://subversion.apache.org/docs/release-notes/1.13.html}}</ref>
| 1.13.0
| 2019-10-30
| No longer supported
|-
|{{Version|c|1.14}}
|2020-05-27<ref>{{Cite web|title=Apache Subversion 1.14 LTS Release Notes|url=https://subversion.apache.org/docs/release-notes/1.14.html|access-date=2020-06-02|website=subversion.apache.org}}</ref>
|1.14.5<ref>{{Cite web |last=The Subversion Team |title=Apache Subversion News Archives |url=https://subversion.apache.org/news.html |access-date=2024-12-20 |website=subversion.apache.org |publisher=The Apache Software Foundation}}</ref><ref>{{Cite web |first=Daniel |last=Sahlberg |date=2024-12-08 |title=Release Announcement – [SECURITY][ANNOUNCE] Apache Subversion 1.14.5 released |series=User mailing list for Subversion |url=https://lists.apache.org/thread/jz1j48zrpryw8600n0x7kssvyq90y1fs |access-date=2024-12-08 |website=lists.apache.org |publisher=The Apache Software Foundation}}</ref><ref>{{Cite web |last=The Subversion Team |date=2024-10-08 |title=Changelog for Version 1.14.5 and earlier |url=https://svn.apache.org/repos/asf/subversion/tags/1.14.5/CHANGES |access-date=2024-12-20 |website=Apache Subversion |publisher=The Apache Software Foundation}}</ref>
|2024-12-08
|Fully supported, [[Long-term support|LTS]]
|-
|{{Version|p|1.15}}
|20XX
|1.15.0
|(Not yet released)
|In development
|-
| colspan="5" | <small>{{Version |l |show=111111}}</small>
|}
<!-- o=Old-Not-Supported; co=Old-Still-Supported; c=Latest-Stable; cp=Preview; p=Planned-Future -->
 
Release dates are extracted from Apache Subversion's {{code|CHANGES}} file,<ref>{{cite web |url=https://svn.apache.org/repos/asf/subversion/trunk/CHANGES |title=Apache Subversion's CHANGES file |access-date=2018-10-31}}</ref> which records all release history.
 
==Features==
* [[Commit (data management)|Commits]] as true [[Atomicity (database systems)|atomic operations]] (interrupted commit operations in CVS would cause repository inconsistency or corruption).
* The system maintains [[Software versioning|versioning]] for directories and some specific file [[metadata]] (see [[#Properties|Properties]]). Users can move or copy files and entire directory-trees very quickly, while retaining full revision history (as being implemented by a reference to the original object).
* Versioning of [[symbolic link]]s.
* Native support for binary files, with space-efficient binary-diff storage.
* [[Apache HTTP serverServer]] as network server, [[WebDAV]]/DeltaV[[WebDAV#Extensions and derivatives|Delta-V]] for [[Protocol (computing)|protocol]]. There is also an independent server [[process (computing)|process]] called svnserve that uses a custom protocol over [[Internet Protocol Suite|TCP/IP]].
* [[Branching (softwareversion control)|Branching]] andis [[Taggingimplemented (software)|tagging]]by area copy of a directory, thus it is a cheap ([[Computationaloperation, complexityindependent theory|constantof time]])file operationssize.
* Natively [[client-serverclient–server model|client/serverclient–server]], [[Abstraction layer|layered]]ed [[Library (computing)|library]] design.
* Client/server protocol sends [[diff]]s in both directions.
* Costs are proportional to change size, not data size.
* [[Parsing|Parsable]] output, including [[XML]] log output.
* [[Open source license]]d – [[Apache License]] since the 1.7 release; prior versions use a derivative of the Apache Software License 1.1.
* [[Open Source]] licensed — "[[CollabNet]]/[[Tigris.org]] Apache-style license"
* [[Internationalization and localization|InternationalisedInternationalized]] program messages.
* [[File locking]] for unmergeable files ("reserved checkouts").
* Path-based authorization for svnserve.
* [[PythonLanguage binding]]s for [[C Sharp (programming language)|PythonC#]], [[RubyPHP]], [[Python (programming language)|RubyPython]], [[Perl]], and [[JavaRuby (programming language)|JavaRuby]], and [[languageJava binding(programming language)|Java]]s.
* Full [[MIME]] support - theusers MIMEcan Typeview ofor eachchange filethe canMIME betype viewedof oreach changedfile, with the software knowing which MIME types can have their differences from previous versions shown.
* Merge tracking – merges between branches will be tracked, this allows automatic merging between branches without telling Subversion what does and does not need to be merged.
* Changelists to organize commits into commit groups.
 
=== Repository access types===
Subversion offers two types of repository storage.
 
====Berkeley DB (deprecated)====
As of version 1.4, Subversion repositories can be accessed by the following means:
The original development of Subversion used the [[Berkeley DB]] package.
Subversion has some limitations with Berkeley DB usage when a program that accesses the database crashes or terminates forcibly. No data loss or corruption occurs, but the repository remains offline while Berkeley DB replays the journal and cleans up any outstanding locks. The safest way to use Subversion with a Berkeley DB repository involves a single server-process running as one user (instead of through a shared filesystem).<ref name="backend">
{{cite book |author1=Ben Collins-Sussman |author2=Brian W. Fitzpatrick |author3=C. Michael Pilato |title= Version Control with Subversion: For Subversion 1.7 |year= 2011 |chapter= Chapter 5: Strategies for Repository Deployment |url= https://svnbook.red-bean.com/en/1.7/svn.reposadmin.planning.html#svn.reposadmin.basics.backends | publisher = O'Reilly}}
</ref> The Berkeley DB backend was deprecated in version 1.8.<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.8.html#bdb-deprecated |title=Apache Subversion 1.8 Release Notes |publisher=Apache Project |access-date=5 May 2020}}</ref>
 
====FSFS====
* Local filesystem or network filesystem,<ref>[[Berkeley DB]] relies on file locking and thus should not be used on (network) filesystems which do not implement them</ref> accessed by client directly.
{{Redirect|FSFS|the Freesat service from Sky|Freesat from Sky|the book by Richard Stallman|Free Software, Free Society}}
* WebDAV/DeltaV (over http or https) using the <tt>mod_dav_svn</tt> module for [[Apache HTTP Server|Apache 2]].
In 2004, a new storage subsystem was developed and named FSFS.
* Custom "svn" protocol, either plaintext or over [[SSH]].
It works faster than the Berkeley DB backend on directories with a large number of files and takes less disk space,
due to less logging.<ref name="backend"/>
 
AllBeginning threewith meansSubversion can1.2, accessFSFS bothbecame FSFSthe default data andstore [[Berkeleyfor DB]]new repositories.
 
The etymology of "FSFS" is based on Subversion's use of the term "filesystem" for its repository storage system.
== Layers ==
FSFS stores its contents directly within the operating system's filesystem, rather than a structured system like Berkeley DB.
Thus, it is a "[Subversion] FileSystem atop the FileSystem".
 
====FSX====
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.
A new filesystem, called FSX, is under development to remove some limitations of FSFS. It was added in version 1.9 and not considered production-ready.<ref>{{Cite web|url=https://subversion.apache.org/docs/release-notes/1.9.html#fsx|title = Apache Subversion 1.9 Release Notes}}</ref> As of version 1.14, it is still marked as experimental.<ref>{{cite web |url=https://subversion.apache.org/docs/api/1.14/group__svn__fs__backend__names.html#ga5b95fecdc34bccacc58e552494dd0889 |title=Subversion: Built-in back-ends |quote=#define SVN_FS_TYPE_FSX "fsx"<br>EXPERIMENTAL filesystem backend.<br>It is not ready for general production use. Please consult the respective release notes on suggested usage scenarios. |access-date=2025-07-25}}</ref>
 
===Repository access===
; Fs : The lowest level, it implements the versioned filesystem which stores the user data.
{{Main| Comparison of Subversion clients}}
; 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".
Access to Subversion repositories can take place by:
; 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 URLs i.e. <tt>file:///path/</tt> for local access, <tt><nowiki>http://host/path/</nowiki></tt> (or https) for WebDAV access, or <tt>svn://host/path/</tt> (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.
 
# Local filesystem or network filesystem,<ref>[[Berkeley DB]] relies on file locking and thus should not be used on (network) filesystems which do not implement them</ref> accessed by client directly. This mode uses the {{mono|file:///path}} access scheme.
== Filesystem ==
# [[WebDAV]]/Delta-V (over http or https) using the {{mono|mod_dav_svn}} module for [[Apache HTTP Server|Apache 2]]. This mode uses the {{mono|<nowiki>http://host/path</nowiki>}} access scheme or {{mono|<nowiki>https://host/path</nowiki>}} for secure connections using ssl.
# Custom "svn" protocol (default [[List of TCP and UDP port numbers|port]] 3690), using plain text or over [[TCP/IP]]. This mode uses either the {{mono|<nowiki>svn://host/path</nowiki>}} access scheme for unencrypted transport or {{mono|<nowiki>svn+ssh://host/path</nowiki>}} scheme for tunneling over ssh.
 
All three means can access both FSFS and Berkeley DB repositories.
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 directory|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.
 
Any 1.x version of a client can work with any 1.x server. Newer clients and servers have additional features and performance capabilities, but have fallback support for older clients/servers.<ref>[https://subversion.apache.org/docs/release-notes/1.5.html SVN 1.5 release notes]</ref>
The Subversion filesystem uses transactions to keep changes [[atomicity|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.
 
== Properties Layers==
Internally, a Subversion system comprises 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.
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:'.
; 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 run when an action is performed. Together, Fs and Repos constitute the "filesystem interface".
; mod_dav_svn : Provides [[WebDAV]]/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.
:* {{mono|file:///path/}} for local access,
:* {{mono|<nowiki>http://host/path/</nowiki>}} or {{mono|<nowiki>https://host/path/</nowiki>}} for WebDAV access, or
:* {{mono|<nowiki>svn://host/path/</nowiki>}} or {{mono|<nowiki>svn+ssh://host/path/</nowiki>}} for the SVN protocol.
; Client, Wc : The highest level. It abstracts repository access and provides common client tasks, such as authenticating users or comparing versions. Subversion clients use the Wc library to manage the local working copy.
 
==Filesystem==
; <tt>svn:executable</tt> : Makes files on [[Unix]]-hosted working copies executable.
[[File:Svn 3D-tree.svg|right|thumb]]
; <tt>svn:mime-type</tt> : Stores the [[MIME]] type of a file. Affects the handling of diffs and merging.
One can view the Subversion filesystem as "two-dimensional".<ref>[https://svnbook.red-bean.com/nightly/en/svn.branchmerge.basicmerging.html#svn.branchmerge.basicmerging.resurrect Basic Merging<!-- Bot generated title -->]</ref> Two coordinates are used to unambiguously address filesystem items:
; <tt>svn:ignore</tt> : A list of filename patterns to ignore in a directory. Similar to [[Concurrent Versions System|CVS]]'s <tt>.cvsignore</tt> file.
* '''Path''' (regular [[Path (computing)|path]] of [[Unix-like]] OS filesystem)
; <tt>svn:keywords</tt> : A list of ''keywords'' to substitute into a file when changes are made. The keywords must also be referenced in the file as <tt>$keyword$</tt>. This is used to maintain certain information (e.g date of last change, revision number) in a file without human intervention.
* '''Revision'''
; <tt>svn:eol-style</tt> : 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 users OS EOL style. Repositories may require this property on all files to prevent inconsistent line endings, which can be a problem in itself.
Each revision in a Subversion filesystem has its own ''[[root directory|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 system consumes storage space proportional to the number of changes made, not to the number of revisions.
; <tt>svn:externals</tt> : Allows parts of other repositories to be automatically checked-out into a sub-directory.
; <tt>svn:needs-lock</tt> : 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.
; <tt>svn:special</tt> : This property isn't meant to be set or modified directly by users. Currently only used for having [[symbolic link]]s 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 Subversion filesystem uses transactions to keep changes [[Atomicity (database systems)|atomic]]. A transaction operates on 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. Potentially, multiple clients can access the same transaction and work together on an atomic change, though no existing clients expose this capability.
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.
 
==Properties==
; <tt>svn:date</tt> : The date and time stamp of when the revision was made.
One important feature of the Subversion filesystem is properties: simple ''name''=''value'' pairs of text. Most properties occur on filesystem entries (i.e., files and directories). These are versioned just like other changes to the filesystem. The Subversion client reserves the 'svn:' prefix for built-in properties, but other names can be used to define custom properties.
; <tt>svn:author</tt> : The name of the user that submitted the change(s).
; <tt>svn:log</tt> : The user-supplied description of the change(s).
 
; {{mono|svn:executable}} : Makes a file on [[Unix]]-hosted working copies executable, when supported by the filesystem.
== Branching and tagging ==
; {{mono|svn:mime-type}} : Stores the [[Internet media type]] ("MIME type") of a file. Affects the handling of diffs and merging.
; {{mono|svn:ignore}} : A list of filename patterns to ignore in a directory. Similar to [[Concurrent Versions System|CVS]]'s <code>.cvsignore</code> file.
; {{mono|svn:keywords}} : A list of ''keywords'' to substitute into a file when changes are made. The file itself must also reference the keywords as {{mono|$keyword$}} or {{mono|$keyword:...$}}. This is used to maintain certain information (e.g., author, date of last change, revision number) in a file without human intervention.<br />The keyword substitution mechanism originates from [[Revision Control System|RCS]] and from CVS.<ref>{{cite web|url=https://man.openbsd.org/OpenBSD-current/man1/rcs.1|title=rcs(1)|work=OpenBSD manual pages}}</ref>
; {{mono|svn:eol-style}} : Makes the client convert [[Newline|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 EOLs match the user's OS EOL style. Repositories may require this property on all files to prevent inconsistent line endings, which can cause a problem in itself.
; {{mono|svn:externals}} : Allows parts of other repositories to be automatically checked out into a subdirectory.
; {{mono|svn:needs-lock}} : Specifies that a file is to be checked out with file permissions set to read-only. This is designed for use with the locking mechanism. The read-only permission reminds one 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.
; {{mono|svn:special}} : This property is not meant to be set or modified directly by users. {{As of | 2010}} it is only used for having [[symbolic link]]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.
; {{mono|svn:mergeinfo}} : Used to track merge data (revision numbers) in Subversion 1.5 (or later). This property is automatically maintained by the {{mono|merge}} command, and it is not recommended to change its value manually.<ref>[https://svnbook.red-bean.com/en/1.5/svn.ref.properties.html Subversion Properties<!-- Bot generated title -->]</ref>
 
Subversion also uses properties 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 they can be changed later if allowed by a pre-revprop-change hook.<ref>[https://svnbook.red-bean.com/en/1.7/svn.ref.reposhooks.pre-revprop-change.html pre-revprop-change]</ref>
Unlike CVS, Subversion does not handle [[Branching (software)|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 '<tt>svn copy</tt>' command, not the native operating system mechanism. Because Subversion implements file copies, the copied files retain the full history of the original file. The copied files take up little extra room in the repository because Subversion only saves the differences from the original files.
 
; {{mono|svn:date}} : The date and time stamp of a revision.
For example, the recommended repository for a ''project'' looks something like this:
; {{mono|svn:author}} : The name of the user that submitted the change(s).
* ''project''/
; {{mono|svn:log}} : The user-supplied description of the change(s).
** '''trunk'''/
** '''branches'''/
*** new-interface/
*** windows-port/
** '''tags'''/
*** version-1.0/
*** version-1.1/
*** version-2.0/
 
==Branching and tagging==
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 [[wikt:milestone|milestones]], usually major releases or perhaps prior to a major departure in development.
Subversion uses the inter-file branching model from [[Perforce]]<ref>[http://www.perforce.com/perforce/branch.html Inter-File Branching: A Practical Method for Representing Variants] {{webarchive|url=https://web.archive.org/web/20070714160428/http://www.perforce.com/perforce/branch.html |date=2007-07-14 }}</ref> to implement [[Branching (software)|branches]] and [[Revision tag|tagging]]. A branch is a separate line of development.<ref>[https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-branchtag.html Branching / Tagging — TortoiseSVN]</ref> Tagging refers to labeling the repository at a certain point in time so that it can be easily found in the future. In Subversion, the only difference between branches and tags is how they are used.
 
The branches and tags were made by simply copying the trunk to theA new paths. All the files in each branch maintainor thetag historyis ofset theup fileby up tousing the point"{{mono|svn ofcopy}}" the copycommand, pluswhich anyshould changesbe madeused since.in Changesplace can be 'merged' back intoof the trunknative oroperating betweensystem branchesmechanism. ToThe Subversion,copied the only difference between tags and branchesdirectory is thatlinked changesto shouldthe notoriginal be checked intoin the tagged versions. Duerepository to thepreserve differencingits algorithmhistory, creatingand athe tag or a branchcopy takes very little additionalextra space in the repository.
 
All the versions in each branch maintain the history of the file up to the point of the copy, plus any changes made since. One can "merge" changes back into the [[Trunk (software)|trunk]] or between branches.
[[Image:Subversion_project_visualization.png|650px|thumb|center|Visualization of very simple Subversion project.]]
 
{{Wide image|Subversion project visualization.svg|815|Visualization of a simple Subversion project|100%|center|alt=alt text}}
== Current issues ==
{{Expand-section|date=January 2007}}
 
==Limitations and problems==
A number of issues with Subversion have been identified by the developers as well as users.
A known problem in Subversion affects the implementation of the file and directory rename operation. {{As of|2014}}, Subversion 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 change, 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 become confused when a move conflicts with edits made elsewhere,<ref>{{Cite web |url=http://subversion.tigris.org/issues/show_bug.cgi?id=898 |title=Implement true renames |access-date=2007-05-11 |archive-date=2002-12-01 |archive-url=https://web.archive.org/web/20021201064344/http://subversion.tigris.org/issues/show_bug.cgi?id=898 |url-status=dead }}</ref> both for regular commits and when merging branches.<ref>[https://svnbook.red-bean.com/en/1.7/svn.branchmerge.advanced.html#svn.branchmerge.advanced.moves Advanced Merging]</ref> The Subversion 1.5 release addressed some of these scenarios while others remained problematic.<ref>[https://subversion.apache.org/docs/release-notes/1.5.html#copy-move-improvements Copy/move-related improvements in Subversion 1.5]</ref> The Subversion 1.8 release addressed some of these problems by making moves a first-class operation on the client, but it is still treated as copy+delete in the repository.<ref>[https://subversion.apache.org/docs/release-notes/1.8.html#moves Working copy records moves as first-class operation in Subversion 1.8]</ref>
 
{{As of | 2013}}, Subversion lacks some repository-administration and management features. For instance, someone may wish to edit the repository to permanently remove all historical records of certain data. Subversion does not have built-in support to achieve this simply.<ref>{{Cite web |url=https://issues.apache.org/jira/browse/SVN-516 |title=[SVN-516] svn obliterate |access-date=2023-09-04 }}</ref>
* No [[Atomicity|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. <!-- Explain why this is bad and why a single move would be better -->
* 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. (See http://subversion.tigris.org/issues/show_bug.cgi?id=516.)
<!-- * The working copy can be very large. In a working copy, each directory from the repository has its one '.svn' directory which stores metadata. *** Need to research this issue more *** -->
<!-- * No access controls in the repository. -->
<!-- * Merge tracking [http://subversion.tigris.org/merge-tracking/] -->
 
Subversion stores additional copies of data on the local machine, which can become an issue with very large projects or files, or if developers work on multiple branches simultaneously. In versions prior to 1.7 these <code>.svn</code> directories on the client side could become corrupted by ill-advised user activity like global search/replace operations.<ref>{{Cite web|url=https://stackoverflow.com/a/579442|title=Subclipse - Repair SVN Checksum}}</ref> Starting with version 1.7 Subversion uses a single centralized {{mono|.svn}} folder per working area.<ref>[https://subversion.apache.org/docs/release-notes/1.7.html#wc-ng Working Copy Metadata Storage Improvements (client)]</ref>
These and other issues are described in the [http://subversion.tigris.org/roadmap.html Subversion roadmap].
 
Subversion does not store the modification times of files. As such, a file checked out of a Subversion repository will have the 'current' date (instead of the modification time in the repository), and a file checked into the repository will have the date of the check-in (instead of the modification time of the file being checked in). This might not always be what is wanted.<ref>{{Cite web |url=https://issues.apache.org/jira/browse/SVN-1256 |title=[SVN-1256] Ability to preserve last modification time (mtime) of files under version control |access-date=2023-09-04 }}</ref>
==Users==
To mitigate this, third-party tools exist that allow for preserving modification time and other filesystem meta-data.<ref>[https://sourceforge.net/projects/freezeattrib/files/ FreezeAttrib (saves/restores file attributes using properties)]</ref><ref>{{GitHub|phmarek/fsvs|fsvs – Full System Versioning System}}<!-- previously "FSVS (Fast System VerSioning)" archived at https://web.archive.org/web/20100825094540/http://fsvs.tigris.org/ --></ref>
Although as of [[2006]] Subversion is less widely used than the traditional [[Concurrent Versions System|CVS]], adoption is increasing, and it is perhaps the most popular alternative. Projects using Subversion include the [[Apache Software Foundation]], [[KDE]], [[GNOME]], [[GNU Compiler Collection|GCC]], [[Python (programming language)|Python]], [[Samba software|Samba]], [[Mono (software)|Mono]] and many others. Many projects have migrated to Subversion due to the comprehensive project management solution [[Trac]], which requires Subversion. [[SourceForge]] now also provides Subversion hosting for its open source projects, and the new [[Google Code]] and [[BountySource]] systems uses it exclusively.
However, giving checked out files a current date is important as well — this is how tools like [[make (software)|make(1)]] will take notice of a changed file for rebuilding it.
 
Subversion uses a centralized [[revision control]] model. [[Ben Collins-Sussman]], one of the designers of Subversion, believes a centralised model would help prevent "insecure programmers" from hiding their work from other team members during development.<ref>[http://blog.red-bean.com/sussman/?p=96 Programmer Insecurity @ iBanjo<!-- Bot generated title -->]</ref> Some users of version control systems see the centralised model as detrimental; famously, [[Linus Torvalds]] attacked Subversion's model and its developers.<ref>[https://www.youtube.com/watch?v=4XpnKHJAok8 Google Tech Talk video] and its [https://web.archive.org/web/20110725034129/https://git.wiki.kernel.org/index.php/LinusTalk200705Transcript transcript]</ref>
== License ==
Subversion is distributed under an [[Apache license|Apache]]/[[BSD license|BSD]]-style license. Some have criticized the license for being incompatible with the [[GNU General Public License|GPL]] version 2, although [[GNU General Public License#Version_3|version 3]] of the GPL is expected to solve the problem.
 
Subversion often does not deal well with the [[Unicode equivalence#Normalization|filename normalization]] performed by the [[HFS+]] filesystem. This can cause problems when files with accented characters in their names are added to the repository on a non-HFS+ filesystem and the repository is then used with HFS+.<ref>{{Cite web |url=https://issues.apache.org/jira/browse/SVN-2464 |title=[SVN-2464] Canonicalize / stringprep UTF-8 filenames to handle composed / decomposed differences shown by e.g. Mac OS X HFS+ |access-date=2023-09-04 }}</ref>
[[List of trademarked open source software|Like many open-source programs]], the name "Subversion" is [[trademark|trademarked]] [http://tess2.uspto.gov/bin/showfield?f=doc&state=qpcbl9.2.1] and may only be used [http://www.collab.net/about/legal/ug.html with the trademark holder's permission].
 
===Subversion tags and branches===
==Related software==
Revision numbers are difficult to remember in any version-control system. For this reason, most systems offer symbolic ''tags'' as user-friendly references to them. Subversion does not have such a feature and what its documentation recommends to use instead is very different in nature. Instead of implementing tags as ''references'' to points in history, Subversion recommends making snapshot ''copies'' into a well-known subdirectory ("{{code|tags/}}") in the space of the repository tree. Only a few predefined ''references'' are available: {{code|HEAD}}, {{code|BASE}}, {{code|PREV}} and {{code|COMMITTED}}.
===GUI front-ends/clients===
*[http://esvn.umputun.com/ eSvn], a [[Qt (toolkit)|Qt]]-based Subversion client.
*[http://gsvn.tigris.org/ 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# with [[Mono (software)|Mono]] also named [http://sourceforge.net/projects/gsvn gsvn].
*[http://jsvn.alternatecomputing.com/ JSVN], a proof-of-concept [[Java (programming language)|Java]] [[Swing (Java)|Swing]] client.
*[http://www.alwins-world.de/programs/kdesvn/ kdesvn], another Subversion client for KDE.
*[http://www.xsteve.at/prg/vc_svn/ psvn.el] A Subversion interface for [[Emacs]].
*[http://ar.oszine.de/projects/qsvn/index.shtml QSvn], another [[Qt (toolkit)|Qt]]-based Subversion client.
*[http://rapidsvn.tigris.org/ RapidSVN], a [[cross-platform]] ([[Linux]], [[Win32]], [[Mac OS X]]) GUI front-end written in [[C++]] using the [[wxWidgets]] framework.
*[http://scplugin.tigris.org SCPlugin], a [[Mac OS X]] plug-in for the [[Macintosh Finder|Finder]].
*[http://www.syntevo.com/smartsvn/ SmartSVN] is a [[cross-platform]] ([[Linux]], [[Mac OS X]], [[Win32]]) client for Subversion; available as a free Foundation version and as a commercial Professional version. It makes use of the [http://svnkit.com/ SVNKit library], a pure [[Java (programming language)|Java]] implementation of Subversion.
*[http://subcommander.tigris.org/ Subcommander], a [[cross-platform]] ([[Linux]], [[Win32]], [[Mac OS X]]) GUI front-end written in [[C++]] using the [[Qt (toolkit)|Qt]] framework.
*[http://www.lachoseinteractive.net/en/community/subversion/svnx/features/ svnX], a [[Mac OS X]] GUI front-end to command line Subversion.
*[http://www.twobarleycorns.net/tkcvs.html tkSVN], a [[Tcl/Tk]]-based combined Subversion and [[Concurrent Versions System|CVS]] client.
*[[TortoiseSVN]], a [[Microsoft Windows|Windows]] shell (i.e. [[Windows Explorer|Explorer]]) extension.
* [http://pysvn.tigris.org/ WorkBench], cross-platform, written with [[wxPython]] and pysvn, an alternative, [[Object orientated|OO-style]] [[Python (programming language)|Python]] binding for the Subversion library.
*[http://zigzig.com/ ZigVersion], a commercial [[Mac OS X]] Subversion client.
*[http://www.syncrosvnclient.com/ Syncro SVN Client], a cross platform front-end.
 
This history-to-space projection has multiple issues:
===Web-based clients===
* [https://bssvnbrowser.bountysource.com/ bsSvnBrowser], a [[Ruby on Rails]] based web interface to Subversion provided by [[BountySource]]
* [http://www.cenqua.com/fisheye/ FishEye], browser interface for CVS and Subversion version control repositories by Cenqua
* [http://insurrection.tigris.org/ Insurrection], a web interface for Subversion
* [http://www.sventon.org/ sventon], a pure Java Subversion repository web browser (open source).
* [http://search.cpan.org/~nikc/SVN-Web/ SVN::Web], a highly-configurable client, written in Perl, that supports cgi, mod_perl1, and mod_perl2
* [http://viewvc.tigris.org/ ViewVC], browser interface for CVS and Subversion version control repositories by Tigris
* [http://polarion.org/ WebClient for SVN] an open source [[cross-platform]] ([[Linux]], [[Win32]], [[Mac OS X]]) Subversion web client written in Java/JSP. It offers a convenient way of browsing the repository content and its history plus simple write operations
* [http://websvn.tigris.org/ WebSVN], a PHP based web interface of Subversion repositories
 
{{ordered list
===IDE===
| When a snapshot is taken, the system does not assign any special meaning to the name of the tag/snapshot. This is the difference between a ''copy'' and a ''reference''. The revision is recorded and the snapshot can be accessed by URL. This makes some operations less convenient and others impossible. For instance, a naive {{code|svn diff -r tag1:tag2 myfile}} does not work; it is slightly more complicated than that to achieve, requiring the user to know and input URL/paths to the snapshots instead of just the names: {{code|svn diff <URL-TO-TAG1>/myfile <URL-TO-TAG2>/myfile}}. Other operations like for instance {{code|svn log -r tag1:tag2 myfile}} are just impossible.
List of [[Integrated Development Environment|IDE]]s, which support or can be integrated with Subversion:
* [http://www.jetbrains.com/idea/ IntelliJ IDEA]
* [[Xcode]] is Apple's Mac OS X IDE
* [[Microsoft Visual Studio]]
** [[AnkhSVN]] is a Visual Studio .NET addin. It allows to perform the most common Subversion operations from directly inside the VS.NET IDE
** [http://www.visualsvn.com/ VisualSVN] is simple and reliable Subversion integration for Visual Studio 2003 and 2005
**[http://www.pushok.com/soft_svn.php PushOk SVN SCC PlugIn] Another Visual Studio addin.
* [[Borland Delphi]]
** [http://delphisvn.sourceforge.net/ DelphiSVN] Subversion integration for Borland Delphi
* [[Eclipse (software)|Eclipse]]
** [http://subclipse.tigris.org Subclipse] is an open source project that integrates Subversion into Eclipse IDE
** [http://www.polarion.org/index.php?page=overview&project=subversive Subversive] Subversion plug-in for Eclipse IDE providing similar to CVS support
** [http://www.easyeclipse.org EasyEclipse] A software bundle that packages Eclipse and several other plug-ins and tools into a single installer. One of the Eclipse plug-ins included in this bundle is a Subversion plug-in
* [[Zend Studio]]
* [[KDevelop]]
* [[Emacs]]
* [[NetBeans]]
** [http://subversion.netbeans.org/ subversion.netbeans.org] Subversion integration for NetBeans IDE
* [[JDeveloper]]
* [[Eric Python IDE]]
* [[ActiveState Komodo]]
 
| When two (ideally independent) object types live in the repository tree, a "fight to the top" can ensue. In other words, it is often difficult to decide at which level to create the {{code|tags/}} subdirectory:
===Other related software===
 
* [http://cia.navi.cx/doc 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".
{{(!}}
* [http://www.intland.com CodeBeamer] is collaborative development software that integrates Subversion for bug tracking, document management, discussion forums, wiki spaces, source code browsing and analysis for multiple projects.
{{!}}
* [http://cvs2svn.tigris.org/ CVS2SVN] is a Python script that converts existing CVS repositories to Subversion repositories.
'''trunk'''/
* [http://www.pumacode.org/projects/vss2svn VSS2SVN] is a small tool that converts existing [[Visual Source Safe]] repositories to Subversion repositories.
/component'''foo'''/
*[http://fsvs.tigris.org/ FSVS] - versions complete filesystems or directories (including modification time, owner, group and access-mode) into a subversion repository.
/component'''bar'''/
* [[GForge]] is an open source project that integrates Subversion with bug tracking, messaging, project hosting.
'''tags'''/
* [[Information currency]] svn ([http://infoeng.sourceforge.net/icsvn icsvn])command-line client.
/1.1/
* [[Oxygen XML Editor]]'s [http://www.oxygenxml.com/subversion_client.html Subversion Client]
/component'''foo'''/
* [http://www.statsvn.org/ StatSVN], StatSVN is an open source program that generates graphical reports about SVN repositories
/component'''bar'''/
* [http://bodrei.com/svnclient/ Subversion сlient] for [[FAR Manager]]
{{!}} &nbsp;or&nbsp;
* [http://svn1clicksetup.tigris.org/ SVN 1-Click Setup] is an installer for setting up a Subversion repository on Windows.
{{!}}
* [http://www.svn2log.org/ SVN2Log], SVN2Log generates changelogs from Subversion repository.
component'''foo'''/
* [http://www.polarion.org/p_svnimporter.php SVN Importer] is a free tool for importing content from other version control systems to a Subversion (SVN) repository
/'''trunk'''/
* [http://svnkit.com/ SVNKit] is an open source project that is a 100% pure [[Java (programming language)|Java]] Subversion client library.
/'''tags'''/
* [http://www.dellroad.org/svnmerge/index svnmerge], which helps keep track of what changes what merges have and have not occurred on branches.
/1.1/
* [http://svnmanager.sourceforge.net/ SVNManager], SVNManager is a webbased tool to administer a Unix Apache WebDAV Subversion repository server.
component'''bar'''/
* [http://dev.vdburgh.net/projects/SVNRevMailer/ SVNRevMailer] SVNRevMailer is a small tool that e-mails reports of the changes in subversion repositories.
/'''trunk'''/
* [[Trac]] and [[Svnwiki]] - integrates Subversion with [[Wiki]] software
/'''tags'''/
* [http://www.wandisco.com/php/product_detail.php?lname=subversion WANdisco], Multi-site, replication add-on for remote Subversion repositories.
/1.1/
{{!)}}
 
| Tags, by their conventional definition, are both read-only and light-weight, on the repository and client. Subversion copies are not read-only, and while they are light-weight on the repository, they are incredibly heavy-weight on the client.}}
 
To address such issues, posters on the Subversion mailing lists have suggested a new feature called "labels" or "aliases".<ref>For example: {{cite mailing list |url=https://svn.haxx.se/dev/archive-2005-05/1095.shtml |title=Subversion 'labels' vs. 'tags' |date=23 May 2005 |access-date=5 May 2020 |mailing-list=SVN Dev |last=Weintraub |first=David }}</ref> SVN labels would more closely resemble the "tags" of other systems such as [[Concurrent Versions System|CVS]] or [[Git (software)|Git]]. The fact that Subversion has global revision numbers opens the way to a very simple label → revision implementation. Yet as of 2013, no progress has been made and symbolic tags are not in the list of the most wanted features.<ref>{{cite web |url=https://subversion.apache.org/roadmap.html |title=Apache Subversion Roadmap |publisher=Apache Project |access-date=5 May 2020}}</ref>
 
==Development and implementation==
[[CollabNet]] has continued its involvement with Subversion, but the project runs as an independent open source community. In November 2009, the project was accepted into the Apache Incubator, aiming to become part of the [[Apache Software Foundation]]'s efforts.<ref>{{Cite web |title=Subversion Submitted to Become a Project at The Apache Software Foundation |url=https://apache.org/foundation/press/pr_2009_11_04.html |date=November 4, 2009 |access-date=October 1, 2019}}</ref> Since March 2010, the project is formally known as Apache Subversion, being a part of the Apache Top-Level Projects.<ref name=CollabNetPR2010>{{cite web|title=CollabNet Supports Subversion's Graduation to Apache Top-Level Project|url=http://www.open.collab.net/news/press/2010/apache.html|publisher=CollabNet|archive-url=https://web.archive.org/web/20100311192650/http://www.open.collab.net/news/press/2010/apache.html|archive-date=2010-03-11|date=1 March 2010}}</ref>
 
In October 2009, [[WANdisco]] announced the hiring of core Subversion committers as the company moved to become a major corporate sponsor of the project. This included Hyrum Wright, president of the Subversion Corporation and release manager for the Subversion project since early 2008, who joined the company to lead its open source team.<ref>{{Cite news |title= WANdisco Names Hyrum Wright to Lead Subversion Open Source Efforts |date= January 7, 2010 |work= News release |author= WANdisco |publisher= Open Source magazine |url= http://opensource.sys-con.com/node/1239202 |access-date= October 29, 2011 |archive-url=https://web.archive.org/web/20120118161238/http://opensource.sys-con.com/node/1239202 |archive-date=2012-01-18 |url-status=live}}</ref>
 
The Subversion open-source community does not provide binaries, but potential users can download binaries from volunteers.<ref>{{Cite web |title= Apache Subversion Binary Packages |work= Official project website |url= https://subversion.apache.org/packages.html |access-date= October 29, 2011 }}</ref> While the Subversion project does not include an official [[graphical user interface]] (GUI) for use with Subversion, third parties have developed a number of different GUIs, along with a wide variety of additional ancillary software.
 
Work announced in 2009 included SubversionJ (a [[Java API]]) and implementation of the Obliterate command, similar to that provided by [[Perforce]]. Both of these enhancements were sponsored by WANdisco.<ref>{{Cite news|title=WANdisco Presents New Initiatives for the Subversion Open Source Project |author=WANdisco |publisher=CM Crossroads |work=News release |date=October 28, 2009 |url=http://www.cmcrossroads.com/index.php?Itemid=100152&catid=101:news-and-announcements&id=13065:wandisco-presents-new-initiatives-for-the-subversion-open-source-project-&option=com_content&view=article |access-date=October 29, 2011 |archive-url=https://web.archive.org/web/20111118040455/http://www.cmcrossroads.com/index.php?Itemid=100152&catid=101%3Anews-and-announcements&id=13065%3Awandisco-presents-new-initiatives-for-the-subversion-open-source-project-&option=com_content&view=article |archive-date=2011-11-18 |url-status=dead }}</ref>
 
The Subversion committers normally have at least one or two new features under active development at any one time. The 1.7 release of Subversion in October 2011 included a streamlined HTTP transport to improve performance and a rewritten working-copy library.<ref>{{Cite web |title= Apache Subversion Roadmap |work= Official project website |url= https://subversion.apache.org/roadmap.html |access-date= October 29, 2011 }}</ref>
 
In 2002, [http://svn.apache.org/repos/asf/subversion/svn-logos/README.html a design contest] was held to select the logo for Subversion. The original entries can be found [http://svn.apache.org/repos/asf/subversion/svn-logos/entries.html here] as well as the [http://svn.apache.org/repos/asf/subversion/svn-logos/VOTES votes] for each logo. The current logo received the most votes in the contest.
 
==See also==
*[[List{{Portal|Free ofand revision controlopen-source software]]}}
 
*[[Comparison of revision control software]]
* [[List of version-control software]]
*[[SVK]] - which is compatible with SVN repositories, and avoids the large .svn metadata directories in the working copy
* [[Comparison of version-control software]]
*[[SourceHaven]] - ports Subversion to an Oracle database and adds a web application for administration
* [[Comparison of Subversion clients]]
* [[List of software that uses Subversion]]
* [[TortoiseSVN]]
 
==Notes==
{{notelist}}
 
==References==
===Footnotes===
{{Reflist}}
 
===Sources===
{{refbegin}}
* C. Michael Pilato, Ben Collins-Sussman, Brian W. Fitzpatrick; ''Version Control with Subversion''; O'Reilly; {{ISBN|0-596-00448-6}} (1st edition, paperback, 2004, [https://svnbook.red-bean.com/ full book online], [https://web.archive.org/web/20080107072118/http://www.mentalpointer.com/Subversion/svn-book.html mirror])
* Garrett Rooney; ''Practical Subversion''; Apress; {{ISBN|1-59059-290-5}} (1st edition, paperback, 2005)
* Mike Mason; ''Pragmatic Version Control Using Subversion''; Pragmatic Bookshelf; {{ISBN|0-9745140-6-3}} (1st edition, paperback, 2005)
* William Nagel; ''Subversion Version Control: Using the Subversion Version Control System in Development Projects''; Prentice Hall; {{ISBN|0-13-185518-2}} (1st edition, paperback, 2005)
{{refend}}
 
==ReferencesFurther and notesreading==
* [http://www.red-bean.com/sussman/svn-anti-fud.html Dispelling Subversion FUD] by Ben Collins-Sussman (Subversion developer), link broken as of 2013-03-07 (Internet Archive.org [[Wayback Machine]] [https://web.archive.org/web/20110718233416/http://www.red-bean.com/sussman/svn-anti-fud.html 2011-07-18 captured version], "last updated" 2004-12-21)
<references/>
*C. Michael Pilato, Ben Collins-Sussman, Brian W. Fitzpatrick; <cite>Version Control with Subversion</cite>; O'Reilly; ISBN 0-596-00448-6 (1st edition, paperback, 2004, full book online at http://svnbook.red-bean.com/)
*Garrett Rooney; <cite>Practical Subversion</cite>; Apress; ISBN 1-59059-290-5 (1st edition, paperback, 2005)
*Mike Mason; <cite>Pragmatic Version Control Using Subversion</cite>; Pragmatic Bookshelf; ISBN 0-9745140-6-3 (1st edition, paperback, 2005)
*William Nagel; <cite>Subversion Version Control: Using the Subversion Version Control System in Development Projects</cite>; Prentice Hall; ISBN 0-13-185518-2 (1st edition, paperback, 2005)
 
==External links==
* {{Official website}}
{{portal|Free software}}
*[http://subversion.tigris.org/ Official site]
*[http://open.collab.net/ openCollabNet, online support community from CollabNet]
*[irc://irc.freenode.net/#svn #svn], Subversion's [[Internet relay chat|IRC]] channel, on [[freenode]]
*[http://svnbook.red-bean.com/ Version Control with Subversion], an O'Reilly book available for free online
*[http://software.newsforge.com/article.pl?sid=05/06/02/1454229&tid=130 Version control for non-programmers with Subversion]
*[http://www.developingprogrammers.com/index.php/2005/11/24/cvs-and-subversion-combined-tutorial/ CVS and Subversion: Combined Tutorial]
*[http://www.svnforum.org A Subversion user community]
*[http://planet-subversion.com/ Planet Subversion]
 
[[Category:Free revision{{Version control software]]}}
{{Apache Software Foundation}}
[[Category:Tigris.org projects]]
{{Authority control}}
 
[[caCategory:Apache Software Foundation projects|Subversion]]
[[Category:Collaborative software]]
[[cs:Subversion]]
[[Category:Concurrent Versions System]]
[[da:Subversion]]
[[Category:Cross-platform free software]]
[[de:Subversion (Software)]]
[[Category:Free software programmed in C]]
[[es:Subversion]]
[[Category:Free version control software]]
[[fr:Subversion (logiciel)]]
[[Category:Software using the Apache license]]
[[ko:서브버전]]
[[Category:Apache Subversion| ]]
[[hi:सबवर्ज़न]]
[[Category:Unix archivers and compression-related utilities]]
[[it:Subversion]]
[[lt:Subversion]]
[[nl:Subversion]]
[[ja:Subversion]]
[[no:Subversion]]
[[pl:Subversion]]
[[pt:Subversion]]
[[ru:Subversion]]
[[sk:Subversion]]
[[sr:Subversion]]
[[sv:Subversion]]
[[vi:Subversion]]
[[zh:Subversion]]