Apache Subversion
Apache Subversion | |
---|---|
![]() | |
Original author(s) | CollabNet |
Developer(s) | Apache Software Foundation |
Initial release | 20 October 2000 |
Stable release(s) | |
1.14.5
/ 8 December 2024 | |
Repository | |
Written in | C |
Operating system | |
Type | Revision control |
License | Apache-2.0[note 1] |
Website | subversion![]() |
Apache Subversion (often abbreviated SVN, after its command name svn) is a free and open-source version control system distributed under the Apache License.[1] 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).
The open source community has used Subversion widely in projects such as Apache Software Foundation, FreeBSD, SourceForge, and from 2006 to 2019, GCC. CodePlex was previously a common host for Subversion repositories.
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.[2]
History
CollabNet founded the Subversion project in 2000 as an effort to write an open-source version-control system which operated much like CVS but which fixed the bugs and supplied some features missing in CVS.[3] By 2001, Subversion had advanced sufficiently to host its own source code,[3] and in February 2004, version 1.0 was released.[4]
In November 2009, Subversion was accepted into Apache Incubator: this marked the beginning of the process to become a standard top-level Apache project.[5] It became a top-level Apache project on February 17, 2010.[6]
Version history
Version | Release date | Latest update | Status | Notes |
---|---|---|---|---|
1.0 | 2004-02-23 | 1.0.9 (2004-10-13) | End of Life | First stable release |
1.1 | 2004-09-29 | 1.1.4 (2005-04-01) | End of Life | FSFS backend, symlinks |
1.2 | 2005-05-21 | 1.2.3 (2005-08-19) | End of Life | Peg revisions, DAV autoversioning |
1.3 | 2005-12-30 | 1.3.2 (2006-05-23) | End of Life | Performance improvements |
1.4 | 2006-09-10 | 1.4.6 (2007-12-21) | End of Life | Working copy performance |
1.5 | 2008-06-19 | 1.5.9 (2010-12-06) | End of Life | Merge tracking, sparse checkouts |
1.6 | 2009-03-20 | 1.6.23 (2013-05-30) | End of Life | Tree conflicts, FSFS packing |
1.7 | 2011-10-11 | 1.7.22 (2015-08-12) | End of Life | Centralized metadata, HTTPv2 |
1.8 | 2013-06-18 | 1.8.19 (2017-08-10) | End of Life | Automatic merging, move tracking |
1.9 | 2015-08-05 | 1.9.12 (2019-07-24) | End of Life | FSFS format 7, FSX experimental |
1.10 LTS | 2018-04-13 | 1.10.8 (2022-04-12) | End of Life | Previous LTS release |
1.11 | 2018-10-30 | 1.11.1 (2019-01-11) | End of Life | Shelving, checkpointing |
1.12 | 2019-04-24 | 1.12.2 (2019-07-24) | End of Life | Improvements to shelving |
1.13 | 2019-10-30 | 1.13.0 (2019-10-30) | End of Life | Last non-LTS release |
1.14 LTS | 2020-05-27 | 1.14.5 (2024-12-08)[8] | Currently Supported | Current LTS release |
1.15 | TBD | — | In Development | Next release |
Release support policy
Subversion follows a support policy where:[9]
- 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
- 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 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
Advanced features
- 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 bindings: APIs available for C#, PHP, Python, Perl, Ruby, and Java
- 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

Subversion uses a layered 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 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 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[10]
- No risk of repository corruption from interrupted operations
Berkeley DB (deprecated)
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.[10] The Berkeley DB backend was deprecated in version 1.8.[11]
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.[12]
Repository access
Subversion repositories can be accessed through three methods:
- Local filesystem: Using the file:///path access scheme
- WebDAV/Delta-V: Over HTTP or HTTPS using the mod_dav_svn module for Apache 2
- http://host/path for standard access
- https://host/path for secure SSL connections
- SVN protocol: Custom protocol (default port 3690)
- svn://host/path for unencrypted transport
- svn+ssh://host/path 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.[13]
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
- svn:executable
- Makes a file executable on Unix-like systems
- svn:mime-type
- Stores the Internet media type of a file, affecting diff and merge operations
- svn:ignore
- Lists filename patterns to ignore in a directory (similar to CVS's
.cvsignore
) - svn:keywords
- Enables keyword substitution ($Author$, $Date$, $Revision$, etc.)
- svn:eol-style
- Controls end-of-line character conversion (native, CRLF, LF, CR)
- svn:externals
- Defines external repository dependencies
- svn:needs-lock
- Indicates files that should be locked before editing
- svn:special
- Used internally for symbolic links (not meant for direct user modification)
- svn:mergeinfo
- Tracks merge history (automatically maintained since version 1.5)[14]
Revision properties
Unlike file properties, revision properties are not versioned and can be modified after commit (if allowed by repository hooks):[15]
- svn:date
- Timestamp of the revision
- svn:author
- Name of the user who committed the revision
- svn:log
- Commit message
Branching and tagging

Subversion uses the inter-file branching model from Perforce[16] to implement branches and tags. Both are created using the svn copy command, which creates a cheap copy that preserves history while using minimal repository space.[17]
A typical repository layout follows this convention:
/project /trunk # Main development line /branches # Feature and release branches /tags # Release tags and milestones
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.[18]
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[19]
- 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)[20]
- No modification times: Files receive current timestamp on checkout[21]
- Centralized model: Requires repository access for most operations
Platform-specific issues
- HFS+ (macOS): Problems with Unicode filename normalization[22]
- 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.[23] Critics like Linus Torvalds have argued for the superiority of distributed version control systems.[24]
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.[25]
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.[26]
Integration and tools
The Subversion project does not provide an official GUI, but numerous third-party tools are available:[27]
- TortoiseSVN (Windows Explorer integration)
- IDE integrations (Eclipse, NetBeans, IntelliJ IDEA, Visual Studio)
- SVNKit (pure Java implementation)
- Command-line clients for all major platforms
See also
Notes
- ^ Apache-2.0 since 2009-07-07.
References
- ^ "Subversion". directory.fsf.org. Free Software Directory. 2020. Retrieved 3 October 2023.
- ^ "The Apache Software Foundation Announces 20th Anniversary of Apache Subversion". GlobeNewswire News Room (Press release). 2020-02-27. Retrieved 2023-01-29.
- ^ a b Collins-Sussman, Ben; Brian W. Fitzpatrick; C. Michael Pilato (2011). "What is Subversion? > Subversion's History". Version Control with Subversion (for Subversion 1.7). Retrieved 15 March 2012.
- ^ Benjamin Zeiss (2004). "subversion 1.0 is released". Linux Weekly News. Retrieved 30 March 2014.
- ^ Rubinstein, David (4 November 2009). "Subversion joins forces with Apache". SD Times. Archived from the original on 2009-11-11. Retrieved 15 March 2012.
- ^ "Subversion is now Apache Subversion". 18 February 2010. Archived from the original on 12 May 2011. Retrieved 15 March 2012.
- ^ "Subversion Release History". Retrieved 2025-05-28.
- ^ "[SECURITY][ANNOUNCE] Apache Subversion 1.14.5 released". 2024-12-08. Retrieved 2025-05-28.
- ^ "Apache Subversion Release Policy". Retrieved 2025-05-28.
- ^ a b Ben Collins-Sussman; Brian W. Fitzpatrick; C. Michael Pilato (2011). "Chapter 5: Strategies for Repository Deployment". Version Control with Subversion: For Subversion 1.7. O'Reilly.
- ^ "Apache Subversion 1.8 Release Notes". Apache Project. Retrieved 5 May 2020.
- ^ "Apache Subversion 1.9 Release Notes".
- ^ SVN 1.5 release notes
- ^ Subversion Properties
- ^ pre-revprop-change hook
- ^ Inter-File Branching: A Practical Method for Representing Variants Archived 2007-07-14 at the Wayback Machine
- ^ Branching / Tagging — TortoiseSVN
- ^ "Apache Subversion CVE-2024-46901 Advisory". 2024-12-08. Retrieved 2025-05-28.
- ^ "[SVN-516] svn obliterate". Retrieved 2023-09-04.
- ^ Working Copy Metadata Storage Improvements (client)
- ^ "[SVN-1256] Ability to preserve last modification time (mtime) of files under version control". Retrieved 2023-09-04.
- ^ "[SVN-2464] Canonicalize / stringprep UTF-8 filenames to handle composed / decomposed differences shown by e.g. Mac OS X HFS+". Retrieved 2023-09-04.
- ^ Programmer Insecurity @ iBanjo
- ^ Google Tech Talk: Linus Torvalds on Git
- ^ Weintraub, David (23 May 2005). "Subversion 'labels' vs. 'tags'". SVN Dev (Mailing list). Retrieved 5 May 2020.
- ^ WANdisco (January 7, 2010). "WANdisco Names Hyrum Wright to Lead Subversion Open Source Efforts". News release. Open Source magazine. Archived from the original on 2012-01-18. Retrieved October 29, 2011.
- ^ "Apache Subversion Binary Packages". Official project website. Retrieved October 29, 2011.
Further reading
- C. Michael Pilato; Ben Collins-Sussman; Brian W. Fitzpatrick (2011). Version Control with Subversion. O'Reilly. ISBN 0-596-00448-6.
- Garrett Rooney (2005). Practical Subversion. Apress. ISBN 1-59059-290-5.
- Mike Mason (2005). Pragmatic Version Control Using Subversion. Pragmatic Bookshelf. ISBN 0-9745140-6-3.
- William Nagel (2005). Subversion Version Control: Using the Subversion Version Control System in Development Projects. Prentice Hall. ISBN 0-13-185518-2.