本节继续介绍SVN功能和CVS功能对比介绍,通过本节的介绍你一定会对SVN功能和CVS功能有清晰的认识,在以后使用过程中你就会有针对性的进行选择了,欢迎大家一起来学习。
八、高效、快捷创建分支和基线
CVS和SVN功能中都支持分支(branch)和基线(tag),通过分支与合并,可以有效支持大项目的并行开发模式;通过基线管理,可以准确标识一组文件的版本,有效进行软件发布管理和必要时的历史回溯。
但CVS和SVN在实现分支和基线的方式上存在很大的不同。CVS在创建分支的时候,需要对所有进行分支的文件进行依次的操作,因此分支的建立成本(主要是建立分支所需的时间,或消耗的计算资源)与参与分支的文件数量成比例,项目越大,版本库越大,文件越多,分支的建立成本越高;基线(tag)的建立与此类似。
SVN的分支和基线是通过执行“拷贝”来建立的:回想一下在没有引入版本管理工具的时候我们是如何进行所谓的“分支”和“基线”管理的?答案显然是“拷贝”—我们通过“拷贝”或“备份”来建立基线;同样,为支持多个开发人员可以同时进行开发,我们为每个开发人员创建一份“拷贝”。由此看来,SVN通过“拷贝”来建立分支和基线显得非常自然,有点“返朴归真”的意思。
由于SVN功能的全局版本号特性,SVN中分支或基线的创建过程,或SVN中的“拷贝”过程,真正的操作是在版本库中创建一个到某一全局版本号的指针(pointer),不再需要针对众多的单个文件依次执行操作。因此,该操作的成本为一个很小的常数,与项目大小,版本库大小,文件数目的多少无关;并且,分支或基线的建立不需要进行版本的冗余存储,新建立的分支或基线基本不占用版本库空间,分支的后续存储空间的开销也只与修改的大小有关。
九、集成ApacheWebServer,提供更多的特性
SVN通过与ApacheWebServer的集成,可以提供基于http/https协议的版本库访问机制,从而支持SVN跨越防火墙的安全访问。除此以外,SVN还可以利用更多的Apache特性,包括但不限于:Apache丰富的用户认证机制(包括通过LDAP服务器如WindowsActiveDirectory服务器的用户认证),基于目录路径的精细粒度的访问控制,对传输的网络流量进行压缩/解压缩,浏览版本库目录结构等等。
十、支持WebDAV
WebDAV(Web-basedDistributedAuthoringandVersioning)是一种基于HTTP1.1协议的通信协议.它扩展了HTTP1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可直接对WebServer直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。
Microsoftwindows2000/XP及IE,Office还有Adobe/MicroMedia的DW等都支持WebDAV,这又大大增强了Web应用的价值,以及效能。对于需要大量发布内容的用户而言,应用WebDAV可以降低对CMS系统的依赖,而且能够更自由的进行创作。上传、下载变得轻松自如。
SVN通过与ApacheWebServer的集成,支持WebDAV协议,使得业务用户(businessusers)或非技术用户在不安装任何版本管理客户端的情况下轻松访问SVN版本库,不改变业务用户已有使用习惯,支持分布的业务用户对文档的评审、修改并实现版本控制,真正将软件开发的生命周期从开发/技术团队扩展到项目的全部干系人(stakeholder),避免通过电子邮件传递文档的混乱与无序、通过Windows操作系统共享造成的安全漏洞、病毒攻击、历史版本被覆盖或丢失、审计困难等诸多典型问题。
十一、更好的冲突标识与处理
CVS和SVN功能都支持通过分支与合并进行并行开发,并可以自动检测到合并时的冲突(conflicts),并在合并结果中以<<<<<<…>>>>>>标识合并的冲突部分。
在CVS中,经常会出现由于用户的疏忽(如,没有注意到冲突,或没有完全处理好冲突)而将仍然带有<<<<<<…>>>>>>冲突标识符号的文件直接进行提交(commit),从而在版本库中产生垃圾版本。
SVN有效解决了CVS的以上问题:SVN记录并保持文件的冲突状态,只有当用户明确执行svnresolved命令后,该冲突状态标识才被复位,该文件才能被提交,从而大大减少了将仍然带有<<<<<<…>>>>>>冲突标识符号的文件直接进行提交的可能性。
十二、更多的本地/离线操作
众所周知,CVS客户端的工作拷贝中包含了一个隐含目录CVS,该目录中记录了客户端需要的一些管理信息;与此类似,SVN的客户端工作拷贝中也包含了一个隐含目录.svn,该目录中同样记录了客户端需要的一些管理信息,如版本库URL,当前访问版本号等。
与CVS不同的是,SVN的.svn目录中还包含了工作拷贝中每一个文件的一个“只读的、干净的”副本。正是由于该副本的存在,使得SVN功能与CVS相比,可以执行更多的本地/离线操作,即某些操作不需要访问版本库服务器,因此不需要存在从客户端到服务器的网络链接,当然也不消耗任何网络带宽,这进一步增强了SVN对广域网的友好支持。
SVN功能的以下命令可以进行离线操作:
svnstatus-显示工作拷贝上的本地修改概况;
svndiff-显示工作拷贝上的本地修改细节,比较修改前后的内容;
svnrevert-撤销工作拷贝上的本地修改;
十三、对符号链接进行版本管理
在Unix文件系统中,符号链接(symboliclinks,包括硬链接和软链接)是一种重要的文件系统元素。CVS不能对符号链接进行版本管理;SVN则可以对符号链接进行版本管理。
十四、元数据管理
与CVS相比,SVN增加了元数据(metadata)管理机制。即可以对版本库中的文件或目录附加任意的“属性”(property),并记录属性的变化历史,也就是对元数据进行版本管理。一个SVN属性是一个“属性名称/属性值”的二元组,如“BugNumber=100”就是一个属性,可以将该属性附加到版本N上,以说明版本N改正了编号为100的BUG。
SVN元数据的目的是提供附件的信息以满足流程或过程自动化的需要,以增强SVN的管理能力和自动化程度。SVN自身就通过“属性”来存储一些特殊的信息。一个使用SVN元数据的例子:可以在一些批处理的脚本程序或SVN的钩子程序(hooks)中创建、访问、修改“属性”元数据来满足流程自动化的要求。SVN功能和CVS功能介绍完毕,请关注本节其他相关报道。
【编辑推荐】