Apache Subversion: Difference between revisions

Content deleted Content added
History: Added planned version
m FSX: typography
 
(19 intermediate revisions by 15 users not shown)
Line 8:
| developer = [[Apache Software Foundation]]
| released = {{Start date and age|2000|10|20|df=yes}}
| latest release version = {{wikidata|property|preferred|references|edit|P348|P548=Q2804309}}
| latest release date = {{Start date and age|{{wikidata|qualifier|preferred|single|P348|P548=Q2804309|P577}}|df=yes}}
| ver layout = stacked
| programming language = [[C (programming language)|C]]
| operating system = {{hlist|[[Centos]]|[[Debian]]|[[Fedora (operating system)|FedoraLinux]]|[[FreeBSD]]|[[HP-UX]]|[[NetBSD]]|[[OpenBSD]]|[[openSUSE]]|[[OpenVMS]]|[[macOS]]|[[Red Hat Linux]]|[[Solaris (operating system)|Solaris]]|[[SUSE Linux]]|[[Ubuntu]]|[[Windows]]}}
| genre = [[Revision control]]
| license = [[Apache License|Apache-2.0]]{{efn|Apache-2.0 since 2009-07-07.}}
}}
 
'''Apache Subversion''' (often abbreviated '''SVN''', after its command name ''svn'') is a [[software versioning]] and [[revisionversion 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).
 
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.
 
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>
 
==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=httphttps://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"
Line 118 ⟶ 120:
|{{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>
|1.14.3
|20232024-12-2008
|Fully supported, [[Long-term support|LTS]]
|-
|{{Version|p|1.15}}
|20XX
|2024-0x
|1.15.0
|(Not yet released)
|In development
|-
| colspan="5" | <small>{{Version |l |show=111100111111}}</small>
|}
<!-- o=Old-Not-Supported; co=Old-Still-Supported; c=Latest-Stable; cp=Preview; p=Planned-Future -->
Line 159 ⟶ 161:
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= httphttps://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=httphttps://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====
Line 175 ⟶ 177:
 
====FSX====
A new filesystem, called FSX, is under development to remove some limitations of FSFS. AsIt ofwas Versionadded in version 1.9, it wasand 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===
Line 187 ⟶ 189:
All three means can access both FSFS and Berkeley DB repositories.
 
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>[httphttps://subversion.apache.org/docs/release-notes/1.5.html SVN 1.5 release notes]</ref>
 
==Layers==
Line 203 ⟶ 205:
==Filesystem==
[[File:Svn 3D-tree.svg|right|thumb]]
One can view the Subversion filesystem as "two-dimensional".<ref>[httphttps://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:
* '''Path''' (regular [[Path (computing)|path]] of [[Unix-like]] OS filesystem)
* '''Revision'''
Line 221 ⟶ 223:
; {{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>[httphttps://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>[httphttps://svnbook.red-bean.com/en/1.7/svn.ref.reposhooks.pre-revprop-change.html pre-revprop-change]</ref>
 
; {{mono|svn:date}} : The date and time stamp of a revision.
Line 230 ⟶ 232:
 
==Branching and tagging==
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>[httphttps://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.
 
A new branch or tag is set up by using the "{{mono|svn copy}}" command, which should be used in place of the native operating system mechanism. The copied directory is linked to the original in the repository to preserve its history, and the copy takes very little extra space in the repository.
Line 239 ⟶ 241:
 
==Limitations and problems==
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>[httphttps://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>[httphttps://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>[httphttps://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>
 
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>[httphttps://subversion.apache.org/docs/release-notes/1.7.html#wc-ng Working Copy Metadata Storage Improvements (client)]</ref>
 
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>
To mitigate this, third-party tools exist that allow for preserving modification time and other filesystem meta-data.<ref>[httphttps://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>
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.
 
Line 286 ⟶ 288:
| 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=httphttps://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= httphttps://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= httphttps://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.
Line 319 ⟶ 321:
===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, [httphttps://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)
Line 330 ⟶ 332:
==External links==
* {{Official website}}
* {{curlie|Computers/Software/Configuration_Management/Tools/Subversion/|Subversion}}
 
{{Version control software}}