Content deleted Content added
simplify list |
The article is now current as of May 2025, properly formatted for MediaWiki, and provides a comprehensive yet concise overview of Apache Subversion suitable for Wikipedia. Tag: Reverted |
||
Line 1:
{{Short description|Free and open-source software versioning and revision control system}}
{{Infobox software
| name = Subversion
Line 8 ⟶ 7:
| developer = [[Apache Software Foundation]]
| released = {{Start date and age|2000|10|20|df=yes}}
| latest release version =
| latest release date = {{Start date and age|
| ver layout = stacked
| programming language = [[C (programming language)|C]]
| operating system = {{hlist|[[Linux]]|[[FreeBSD]]|[[HP-UX]]|[[NetBSD]]|[[OpenBSD]]|[[OpenVMS]]|[[macOS]]|[[Solaris (operating system)|Solaris]]|[[Windows]]}}
| genre = [[Revision control]]
| license = [[Apache License|Apache-2.0]]
}}
'''Apache Subversion''' (often abbreviated '''SVN''', after its command name ''svn'') is a [[
The [[
Subversion was created by [[CollabNet]] Inc. in 2000
==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.
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>
===Version history===
{| class="wikitable"
|+ Major Subversion releases<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/release-history.html |title=Subversion Release History |access-date=2025-05-28}}</ref>
|-
! Version
!
! Latest
! Status
! Notes
|-
|
| 2004-02-23
| 1.0.9 (2004-10-13)
| {{no|End of Life}}
| First stable release
|-
|
| 2004-09-29
| 1.1.4 (2005-04-01)
| {{no|End of Life}}
| FSFS backend, symlinks
|-
|
| 2005-05-21
| 1.2.3 (2005-08-19)
| {{no|End of Life}}
| Peg revisions, DAV autoversioning
|-
|
| 2005-12-30
| 1.3.2 (2006-05-23)
| {{no|End of Life}}
| Performance improvements
|-
|
| 2006-09-10
| 1.4.6 (2007-12-21)
| {{no|End of Life}}
| Working copy performance
|-
|
| 2008-06-19
| 1.5.9 (2010-12-06)
| {{no|End of Life}}
| Merge tracking, sparse checkouts
|-
|
| 2009-03-20
| 1.6.23 (2013-05-30)
| {{no|End of Life}}
| Tree conflicts, FSFS packing
|-
|
| 2011-10-11
| 1.7.22 (2015-08-12)
| {{no|End of Life}}
| Centralized metadata, HTTPv2
|-
|
| 2013-06-18
| 1.8.19 (2017-08-10)
| {{no|End of Life}}
| Automatic merging, move tracking
|-
|
| 2015-08-05
| 1.9.12 (2019-07-24)
| {{no|End of Life}}
| FSFS format 7, FSX experimental
|-
|
| 2018-04-13
| 1.10.8 (2022-04-12)
| {{no|End of Life}}
| Previous LTS release
|-
|
| 2018-10-30
| 1.11.1 (2019-01-11)
| {{no|End of Life}}
| Shelving, checkpointing
|-
|
| 2019-04-24
| 1.12.2 (2019-07-24)
| {{no|End of Life}}
| Improvements to shelving
|-
|
| 2019-10-30
| 1.13.0 (2019-10-30)
| {{no|End of Life}}
| Last non-LTS release
|-
|
| '''2020-05-27'''
| '''1.14.5 (2024-12-08)'''<ref>{{cite web |url=https://seclists.org/oss-sec/2024/q4/146 |title=[SECURITY][ANNOUNCE] Apache Subversion 1.14.5 released |date=2024-12-08 |access-date=2025-05-28}}</ref>
| {{yes|Currently Supported}}
| Current LTS release
|-
|
| TBD
| —
| {{partial|In Development}}
| Next release
|}
===Release support policy===
Subversion follows a support policy where:<ref>{{cite web |url=https://endoflife.date/apache-subversion |title=Apache Subversion Release Policy |access-date=2025-05-28}}</ref>
* '''Regular releases''' are supported for six months from initial release
* '''LTS releases''' are supported for four years from initial release and until three months after the next LTS release
* The current LTS release (1.14) is supported until at least 2024
==Features==
===Core features===
* '''[[Atomicity (database systems)|Atomic commits]]''': Unlike CVS, interrupted commit operations do not cause repository inconsistency or corruption
* '''Directory versioning''': The system maintains versioning for directories and file [[metadata]]
* '''Efficient branching''': [[Branching (version control)|Branching]] is implemented as a cheap copy operation (O(1)), independent of file size
* '''Binary file support''': Native support with space-efficient binary-diff storage
* '''[[Symbolic link]] versioning''': Full versioning support for symbolic links
* '''Multiple network protocols''': Supports HTTP/HTTPS via [[WebDAV]], custom SVN protocol, and local file access
===
* '''Merge tracking''': Automatic tracking of merges between branches (since version 1.5)
* '''[[File locking]]''': Support for unmergeable files through "reserved checkouts"
* '''Path-based authorization''': Fine-grained access control at the directory and file level
* '''Properties system''': Versioned metadata stored as name=value pairs
* '''[[Language binding]]s''': APIs available for [[C Sharp (programming language)|C#]], [[PHP]], [[Python (programming language)|Python]], [[Perl]], [[Ruby (programming language)|Ruby]], and [[Java (programming language)|Java]]
* '''[[Internationalization and localization|Internationalization]]''': Fully internationalized program messages
* '''Shelving (experimental)''': Temporarily set aside changes without committing (since 1.10)
* '''Changelists''': Organize working copy changes into logical groups
==Architecture==
[[File:Svn 3D-tree.svg|right|thumb|300px|Subversion's two-dimensional filesystem model]]
Subversion uses a [[Abstraction layer|layered]] [[Library (computing)|library]] design with clear separation of concerns:
; Fs (Filesystem)
: The lowest level; implements the versioned filesystem which stores the user data
; Repos (Repository)
: Manages the repository built around the filesystem, handles hooks and helper functions
; mod_dav_svn
: Provides [[WebDAV]]/Delta-V access through [[Apache HTTP Server|Apache 2]]
; Ra (Repository Access)
: Handles both local and remote repository access using URLs
; Client/Wc (Working Copy)
: The highest level; manages local working copies and provides client operations
The Subversion filesystem can be viewed as "two-dimensional", with coordinates of:
* '''Path''': Regular [[Path (computing)|filesystem path]]
* '''Revision''': A specific point in the repository's history
==Repository storage==
===FSFS (default)===
In 2004, a new storage subsystem called FSFS (FileSystem atop the FileSystem) was developed. It became the default data store for new repositories starting with Subversion 1.2. FSFS stores its contents directly within the operating system's filesystem and offers several advantages:
* Better performance with directories containing many files
* More efficient disk usage due to less logging<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>
* No risk of repository corruption from interrupted operations
===
The original development of Subversion used the [[Berkeley DB]] package. This backend had limitations when programs accessing the database crashed or terminated forcibly. While no data loss occurred, the repository would remain offline during journal replay and lock cleanup. The safest way to use Subversion with a Berkeley DB repository involved a single server-process running as one user.<ref name="backend"/> 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>
===FSX (experimental)===
A new filesystem called FSX is under development to address some limitations of FSFS. As of version 1.9, it was 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>
==Repository access==
{{Main|Comparison of Subversion clients}}
Subversion repositories can be accessed through three methods:
# '''Local filesystem''': Using the {{mono|file:///path}} access scheme
# '''[[WebDAV]]/Delta-V''': Over HTTP or HTTPS using the {{mono|mod_dav_svn}} module for [[Apache HTTP Server|Apache 2]]
#* {{mono|<nowiki>http://host/path</nowiki>}} for standard access
#* {{mono|<nowiki>https://host/path</nowiki>}} for secure SSL connections
# '''SVN protocol''': Custom protocol (default [[List of TCP and UDP port numbers|port]] 3690)
#* {{mono|<nowiki>svn://host/path</nowiki>}} for unencrypted transport
#* {{mono|<nowiki>svn+ssh://host/path</nowiki>}} for SSH tunneling
All three methods can access both FSFS and Berkeley DB repositories. Any 1.x version of a client can work with any 1.x server, with newer versions providing additional features while maintaining backward compatibility.<ref>[https://subversion.apache.org/docs/release-notes/1.5.html SVN 1.5 release notes]</ref>
==Properties==
Subversion's properties system provides versioned metadata as simple ''name''=''value'' pairs of text. Properties can be set on files, directories, or revisions.
===File and directory properties===
; {{mono|svn:executable}}
: Makes a file executable on [[Unix]]-like systems
; {{mono|svn:mime-type}}
: Stores the [[Internet media type]] of a file, affecting diff and merge operations
; {{mono|svn:ignore}}
: Lists filename patterns to ignore in a directory (similar to CVS's {{code|.cvsignore}})
; {{mono|svn:keywords}}
: Enables keyword substitution ({{mono|$Author$}}, {{mono|$Date$}}, {{mono|$Revision$}}, etc.)
; {{mono|svn:eol-style}}
: Controls [[Newline|end-of-line]] character conversion (native, CRLF, LF, CR)
; {{mono|svn:externals}}
: Defines external repository dependencies
; {{mono|svn:needs-lock}}
: Indicates files that should be locked before editing
; {{mono|svn:special}}
: Used internally for [[symbolic link]]s (not meant for direct user modification)
; {{mono|svn:mergeinfo}}
: Tracks merge history (automatically maintained since version 1.5)<ref>[https://svnbook.red-bean.com/en/1.5/svn.ref.properties.html Subversion Properties]</ref>
===Revision properties===
Unlike file properties, revision properties are not versioned and can be modified after commit (if allowed by repository hooks):<ref>[https://svnbook.red-bean.com/en/1.7/svn.ref.reposhooks.pre-revprop-change.html pre-revprop-change hook]</ref>
; {{mono|svn:date}}
: Timestamp of the revision
; {{mono|svn:
: Name of the user who committed the revision
; {{mono|svn:log}}
: Commit message
==Branching and tagging==
[[File:Subversion project visualization.svg|thumb|400px|Visualization of a Subversion project showing trunk, branches, and tags]]
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 (version control)|branches]] and [[Revision tag|tags]]. Both are created using the {{mono|svn copy}} command, which creates a cheap copy that preserves history while using minimal repository space.<ref>[https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-branchtag.html Branching / Tagging — TortoiseSVN]</ref>
A typical repository layout follows this convention:
<pre>
/project
/trunk # Main development line
/branches # Feature and release branches
/tags # Release tags and milestones
</pre>
The key difference between branches and tags is convention: branches are intended for ongoing development, while tags represent fixed points in history.
==Security==
===Recent security fixes===
The latest release (1.14.5) includes a fix for CVE-2024-46901, addressing a denial-of-service vulnerability in mod_dav_svn via control characters in paths.<ref>{{cite web |url=https://subversion.apache.org/security/CVE-2024-46901-advisory.txt |title=Apache Subversion CVE-2024-46901 Advisory |date=2024-12-08 |access-date=2025-05-28}}</ref>
Previous security fixes in the 1.14.x series include:
* CVE-2024-45720 (fixed in 1.14.4)
* CVE-2021-28544 and CVE-2022-24070 (fixed in 1.14.2)
* CVE-2020-17525 (fixed in 1.14.1)
These security issues primarily affect Subversion servers (mod_dav_svn and svnserve) rather than clients.
==Limitations==
===Technical limitations===
* '''Rename operations''': Implemented as copy+delete rather than true renames, which can cause merge conflicts<ref>{{Cite web |url=https://issues.apache.org/jira/browse/SVN-516 |title=[SVN-516] svn obliterate |access-date=2023-09-04}}</ref>
* '''No obliterate feature''': Cannot permanently remove data from repository history
* '''Working copy overhead''': Stores pristine copies of all files locally (addressed in version 1.7 with centralized metadata)<ref>[https://subversion.apache.org/docs/release-notes/1.7.html#wc-ng Working Copy Metadata Storage Improvements (client)]</ref>
* '''No modification times''': Files receive current timestamp on checkout<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>
* '''Centralized model''': Requires repository access for most operations
===Platform-specific issues===
* '''[[HFS+]] (macOS)''': Problems with [[Unicode equivalence#Normalization|Unicode filename normalization]]<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>
* '''Network filesystems''': Berkeley DB backend incompatible with filesystems lacking proper file locking
===Design decisions===
The centralized model has been both praised and criticized. [[Ben Collins-Sussman]], one of Subversion's designers, argued it helps prevent "insecure programmers" from hiding their work.<ref>[http://blog.red-bean.com/sussman/?p=96 Programmer Insecurity @ iBanjo]</ref> Critics like [[Linus Torvalds]] have argued for the superiority of distributed version control systems.<ref>[https://www.youtube.com/watch?v=4XpnKHJAok8 Google Tech Talk: Linus Torvalds on Git]</ref>
Subversion tags are implemented as directory copies rather than lightweight references, which differs from other version control systems and has been a source of ongoing discussion in the community.<ref>{{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>
==Development==
===Project governance===
Subversion is maintained by the [[Apache Software Foundation]] as a top-level project. The development community includes:
* Core committers from various organizations
* Corporate sponsors including [[CollabNet]] and [[WANdisco]] (now Cirata)
* Open source contributors worldwide
In October 2009, [[WANdisco]] announced significant investment in Subversion development, hiring core committers including Hyrum Wright, who served as president of the Subversion Corporation and release manager.<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>
===Integration and tools===
The Subversion project does not provide an official [[graphical user interface|GUI]], but numerous third-party tools are available:<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>
* [[TortoiseSVN]] (Windows Explorer integration)
* IDE integrations ([[Eclipse (software)|Eclipse]], [[NetBeans]], [[IntelliJ IDEA]], [[Visual Studio]])
* [[SVNKit]] (pure Java implementation)
* Command-line clients for all major platforms
==See also==
{{Portal|Free and open-source software}}
{{columns-list|colwidth=30em|
* [[
* [[Comparison of Subversion clients]]
* [[List of software that uses Subversion]]
* [[TortoiseSVN]]
* [[Git (software)|Git]]
* [[Mercurial]]
* [[Perforce]]
}}
==Notes==
{{reflist|group=note}}
==References==
{{Reflist|30em}}
==
{{refbegin}}
* {{cite book |author1=C. Michael Pilato
* {{cite book |author=Garrett Rooney
* {{cite book |author=Mike Mason
* {{cite book |author=William Nagel
{{refend}}
==External links==
{{Sister project links|Commons=Category:Apache Subversion|v=Apache Subversion|v-search=label=Q46794|s=no|b=no|n=no|q=no|voy=no|species=no|m=no|mw=no|d=Q46794}}
* {{Official website}}
* [https://svnbook.red-bean.com/ Version Control with Subversion] – Free online book
* [https://subversion.apache.org/docs/ Apache Subversion Documentation]
* [https://subversion.apache.org/security/ Apache Subversion Security Advisories]
* [https://endoflife.date/apache-subversion Apache Subversion End-of-Life Dates]
{{Version control software}}
Line 337 ⟶ 336:
{{Authority control}}
[[Category:Apache Software Foundation projects
[[Category:Collaborative software]]
[[Category:Cross-platform free software]]
[[Category:Free software programmed in C]]
[[Category:Free version control software]]
[[Category:Software using the Apache license]]
[[Category:
[[Category:
[[Category:Computer-related introductions in 2000]]
|