Subversion
Apache Subversion(简称SVN,svn),一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS转移到Subversion。
开发者 | Apache软件基金会 |
---|---|
首次发布 | 2000年10月20日 |
当前版本 | 1.14.8(2024年10月8日[±] | )
源代码库 | |
编程语言 | C |
操作系统 | 跨平台 |
类型 | 版本控制 |
许可协议 | Apache许可证 |
网站 | subversion |
历史
CollabNet于2000年创建SVN项目,意在写出一款近似CVS操作方式的版本控制系统。只不过,此款产品针对CVS的bug和一些缺失的功能,进行了修正和补充。
2000年2月,他们联系了Open Source Development with CVS(Coriolis, 1999)的作者Karl Fogel,问他是否愿意为这个新专案工作。巧的是这时Karl已经在和他的朋友Jim Blandy讨论一个新的版本控制系统的设计。在1995年,两人开了一家提供CVS技术支持的公司,叫作Cyclic Software。虽然公司已经卖掉了,他们仍然在日常工作中使用CVS。在使用CVS时受到的束缚已经让Jim开始仔细思考管理版本化数据的更好的路子。他不仅已经起好了名字“Subversion”,而且有了Subvesion资料库的基本设计。当CollabNet打来电话时,Karl立刻同意为这个专案工作。Jim征得他的老板RedHat Software的同意,让他投入这个专案,而且没有时间限制。CollabNet雇用了Karl和Ben Collins-Sussman,从5月份开始详细设计。由于Greg Stein和CollabNet的Brian Behlendorf和Jason Robbins作了恰当的推动,Subversion很快吸引了一个活跃的开发人员社群。这说明了许多人有相同的受制于CVS的经验,他们对终于有机会对它做点什么表示欢迎。
最初的设计团队设定了几个简单的目标。他们并不想在版本控制方法论上有新突破。他们只想修补CVS。他们决定Subversion应该与CVS相似,保留相同的开发模型,但不复制CVS最明显的缺点。虽然它不一定是CVS的完全的替代品,但它应该和CVS相似,从而任何CVS用户可以不费什么力气的转换过来。
经过14个月的编码,在2001年8月31号,Subversion可以“自我寄生”了。就是说,Subversion开发人员停止使用CVS管理Subversion的源代码,开始使用Subversion代替。
虽然CollabNet发起了这个项目,而且仍然资助一大部分的工作(它为一些专职的Subversion开发人员发薪水)。但是Subversion像大部分开放源码的项目一样运作,由一个松散透明,鼓励能者多劳的规则管理。CollabNet的版权许可证和Debian FSG完全兼容。换句话说,任何人可以免费下载,修改,按自己的意愿重新分发Subversion,而不必得到来自CollabNet或其他任何人的许可。
2009年11月,Subversion被Apache Incubator专案所接收。
2010年1月,正式成为Apache软件基金会的一个顶级专案。
特性
- 统一的版本号。CVS是对每个文件顺序编排版本号,在某一时间各文件的版本号各不相同。而Subversion下,任何一次提交都会对所有文件增加到同一个新版本号,即使是提交并不涉及的文件。所以,各文件在某任意时间的版本号是相同的。版本号相同的文件构成软件的一个版本。
- 原子提交。一次提交不管是单个还是多个文件,都是作为一个整体提交的。在这当中发生的意外例如传输中断,不会引起数据库的不完整和数据损坏。
- 重命名、复制、删除文件等动作都保存在版本历史记录当中。
- 对于二进制文件,使用了节省空间的保存方法(简单的理解,就是只保存和上一版本不同之处)。
- 目录也有版本历史。整个目录树可以被移动或者复制,操作很简单,而且能够保留全部版本记录。
- 分支的开销非常小。
- 最佳化过的数据库访问,使得一些操作不必访问数据库就可以做到。这样减少了很多不必要的和数据库主机之间的网络流量。
- 支持元数据(Metadata)管理。每个目录或文件都可以定义属性(Property),它是一些隐藏的键值对,用户可以自定义属性内容,而且属性和文件内容一样在版本控制范围内。
- 支持FSFS和Berkeley DB两种资料库格式。
企业级subversion
Subversion Multisite
对于企业级应用,subversion还有其先天不足,比如对于多个地点的并行开发。Wandisco公司为此开发了subversion multisite,实现异地对等服务器自动同步,支持并行开发以及异地备份。
基于Subversion的ALM平台——UberSVN
ALM(Application Lifecycle Management)是软件配置管理的未来趋势,各种软件版本工具包括subversion都要集成到其中。目前UberSVN是唯一的以Subversion为基础构建的ALM平台,并实现了协同开发以及社交化编码。
不足
- 只能设置目录的访问权限,无法设置单个文件的访问权限(目前可以通过辅助模块比如wandisco access control实现单文件访问)。
- 数据库为二进制格式,无法方便的利用其它软件读取数据库的内容。
使用情况
虽然在2006年Subversion的使用族群仍然远少于传统的CVS,但已经有许多开放源码团体决定将CVS转换为Subversion。已经转换使用Subversion的包括了FreeBSD、Apache Software Foundation、KDE、GNOME、GCC、Python、Samba、Mono以及许多团体。许多开发团队换用Subversion是因为Trac、SourceForge、CollabNet、CodeBeamer等专案协同作业软体以及Eclipse、NetBeans等IDE提供Subversion的支援整合。除此之外,一些自由软体开发的协作网如SourceForge.net除了提供CVS外,现在也提供专案开发者使用Subversion作为源代码管理系统,JavaForge、Google Code以及BountySource则以Subversion作为官方的源代码管理系统。
2009年,绝大多数CVS服务已经改用SVN。此时CVS早已经停止维护。不过CVS也有了合适的替代品。
SVN客户端图形化软体
TortoiseSVN
在windows非常受到欢迎的一套客户端软体,它与档案总管整合得相当不错,可以透过档案总管在档案或目录上用滑鼠右键的选单完成SVN的操作。 TortoiseSVN官方网站(页面存档备份,存于互联网档案馆)
SnailSVN
Mac OS X 平台下类似 TortoiseSVN 的图形化 SVN 客户端,可自动标记文件状态,并通过右键菜单提供各种常用 SVN 功能。 下载 SnailSVN (Mac App Store)(页面存档备份,存于互联网档案馆)
Ankhsvn
将subversion的操作整合进Visual Studio的SVN 客户端软体。 Ankhsvn官方网站(页面存档备份,存于互联网档案馆)
Subclipse
将Subversion的操作整合进Eclipse的SVN 客户端软体。 Subclipse官方网站(页面存档备份,存于互联网档案馆)
Subversive
和Subclipse相同。 Subversive官方网站(页面存档备份,存于互联网档案馆)
SCPlugin
Mac OS下类似TortoiseSVN的软体。 SCPlugin官方网站(页面存档备份,存于互联网档案馆)
SVNx
Mac OS X下的一款客户端软体。 SVNx官方网站(页面存档备份,存于互联网档案馆)
eSVN
Unix下类似TortoiseSVN的软体。 eSVN官方网站(页面存档备份,存于互联网档案馆)
kdesvn
Linux下使用KDE桌面管理下类似TortoiseSVN的软体。 kdesvn官方网站
RabbitVCS
Linux下使用Gnome桌面管理下类似TortoiseSVN的软体。 RabbitVCS官方网站(页面存档备份,存于互联网档案馆)
GTalkabout
Windows下整合了讨论功能的客户端软体。 GTalkabout官方网站(页面存档备份,存于互联网档案馆)