### Subversion的特性 当讨论Subversion为版本控制领域带来的特性的时候,通过学习它在CVS基础上所作的改进会是比较有效的方法。如果你不熟悉CVS,你会不太明白所有的特性,如果你根本就不熟悉版本控制,你会瞪着眼无所适从,你最好首先阅读一下[第2章 *基本概念*](# "第2章基本概念"),它提供了一个版本控制的简单介绍。 Subversion提供: 版本化的目录 CVS只记录单个文件的历史,但是Subversion实现了一个可以跟踪目录树更改的“虚拟”版本化文件系统,文件*和*目录都是有版本的。 真实的版本历史 因为CVS只记录单个文件的版本,对于拷贝和改名―这些文件经常发生的操作,会改变一个目录的内容―在CVS中并不支持。在CVS里你也不可以用一个完全不同的文件覆盖原来的同名文件而又不继承原来文件的历史。通过Subversion,你可以对文件或是目录进行增加、拷贝和改名操作,也可以新增一个具有干净历史的文件。 原子提交 一系列的改动,要么全部提交到版本库,要么一个也不提交,这样可以让用户构建一个所要提交修改的逻辑块,防止部分修改提交到版本库。 版本化的元数据 每一个文件或目录都有一套属性―键和它们的值,你可以建立并存储任何键/值对,属性也是随时间的流逝而纳入版本控制的,很像文件的内容。 可选的网络层 Subversion在版本库访问方面有一个抽象概念,利于人们去实现新的网络机制,Subversion可以作为一个扩展模块与Apache结合,这给了Subversion在稳定性和交互性方面很大的好处,可以直接使用服务器的特性―认证、授权和传输压缩等等。也有一个轻型的,单独运行的Subversion服务,这个服务使用自己的协议可以轻松的用SSH封装。 一致的数据操作 Subversion表示文件是建立在二进制文件区别算法基础上的,对于文本(可读)和二进制(不可读)文件具备一致的操作方式,两种类型的文件都压缩存放在版本库中,区别信息是在网络上双向传递的。 有效率的分支和标签 分支与标签的代价不与工程的大小成比例,Subversion建立分支与标签时只是拷贝整个工程,使用了一种类似于硬链接的机制,因而这类操作通常只会花费很少并且相对固定的时间。 可修改性 Subversion没有历史负担,它由一系列良好的共享C库实现,具有定义良好的API,这使得Subversion非常容易维护,可以轻易的用其他语言操作。