Subversion的特性

当讨论Subversion给版本控制带了什么特性的时候,看看它如何改善了CVS的设计是很有帮助的。如果你不熟悉CVS,你可能不理解所有这些特性。如果你根本不熟悉版本控制,那如果不先读一下第二章基本概念的话,可能会有点茫然。在第二章里我们提供了对版本控制的一般性介绍。

Subversion提供了

目录版本化

CVS只跟踪单个文件的历史,但Subversion实现了一个“虚拟”的版本化文件系统,可以跟踪整个文件目录树随时间的改变。文件和目录都版本化了。

真正的版本历史

由于CVS局限于文件版本化,而类似复制和改名这些操作,虽然是在文件上执行,但实际上真正改动的是目录的内容,所以CVS不能支持这些操作。另外,在CVS中无法做到用同名的新文件代替原来的版本化文件而不影响原来文件的历史,即使它们毫不相干。在Subversion中你可以增加,删除,复制,重命名文件和目录。 每一个新加的文件开始于一个自己的新的干净的历史。

原子提交

一组改动要么完全进入资料库,要么完全不。这让开发人员可以一个逻辑块为单位创建和提交改变,从而防止只有部分改动成功发送到资料库所带来的问题。

版本化源数据

每个文件和目录由一个由键值对组成的属性集与之相关联。你可以创建和保存任意你想要的键值对。属性也被按时间版本化了,就像文件内容一样。

网络层的选择

Subversion有一个资料库访问的抽象概念。使得人们可以很容易的完成新的网络机制。Subversion可以作为一个扩展模块插入到Apache Http server中。这使Subversion在稳定性和互操作性上有很大优势,而且可立即利用服务器现有的特性,比如认证,授权,压缩传送(wire compression)等等。也可使用一个更轻量级,独立的Subversion服务器进程。该服务器使用定制的协议,可以很容易的调节到SSH上。

一致的数据处理

Subversion使用二进制差别算法表示文件的差别。这种算法对文本和二进制文件同样有效。所有类型的文件同样压缩存储于资料库。文件差别可以在网络上双向传送。

高效的分支和标签

分支和标签的的花费不一定与项目大小成比例。Subversion 创建分支和标签只是简单的使用类似hard-link的机制来复制项目。因而这些操作仅仅花费非常少的,一定的时间。

Hackability

Subversion没有历史包袱,它由一组有定义良好的API的C共享库实现。这使得Subversion 极好维护和被其他应用和语言利用。