Subversion的特性

Subversion将很多新特性引入版本控制领域。在讲解这些特性时,我们会经常性的与CVS进行对比,以说明Subversion比CVS高明在哪里。如果不熟悉CVS,了解所有Subversion的特性会有一定的困难。而如果根本就不熟悉版本控制,你就只有干瞪眼的份儿了。因此,最好首先阅读一下第 2 章 基本概念,这一章简单介绍了一些版本控制的基本思想和概念。

Subversion支持:

版本化的目录

CVS只能跟踪单个文件的变更历史,但是Subversion实现的“虚拟”版本化文件系统则可以跟踪目录树的变更。在Subversion中,文件目录都是版本化的。

真实的版本历史

由于只能跟踪单个文件的变更,CVS无法支持如文件拷贝和改名这些常见的操作—这些操作改变了目录的内容。同样,在CVS中,目录下的文件只要名字相同即拥有相同的历史,即使这些同名文件在历史上毫无关系。而在Subversion中,可以对文件或目录进行增加、拷贝和改名操作,也解决了同名而无关的文件之间的历史联系问题。

原子提交

一系列相关的更改,要么全部提交到版本库,要么一个也不提交。这样用户就可以将相关的更改组成一个逻辑整体,防止出现部分修改而另一部分未修改的情况提交到版本库中。

版本化的元数据

每一个文件和目录都有自己的一组属性—键和它们的值。可以根据需要建立并存储任何键/值对。和文件本身的内容一样,属性也在版本控制之下。

可选的网络层

Subversion在版本库访问的实现上具有较高的抽象程度,利于人们实现新的网络访问机制。Subversion可以作为一个扩展模块嵌入到Apache之中。这种方式在稳定性和交互性方面有很大的优势,可以直接使用服务器的成熟技术—认证、授权和传输压缩等等。此外,Subversion自身也实现了一个轻型的,可独立运行的服务器软件。这个服务器使用了一个特定的协议,这个协议可以轻松的用SSH封装。

一致的数据操作

Subversion用一个二进制差异算法描述文件的变化,对于文本(可读)和二进制(不可读)文件其操作方式是一致的。这两种类型的文件压缩存储在版本库中,而差异信息则在网络上双向传递。

高效的分支和标签操作

在Subversion中,分支与标签操作的开销与工程的大小无关。Subversion的分支和标签操作用只是一种类似于硬链接的机制拷贝整个工程。因而这些操作通常只会花费很少且相对固定的时间。

可修改性

Subversion没有历史负担,它以一系列优质的共享C程序库的方式实现,具有定义良好的API。这使得Subversion非常容易维护,和其它语言的互操作性很强。