二、SVN与CVS优缺点
1,存储类型格式
CVS是个基于RCS文件的版本控制系统。每个CVS文件都是普通的文件,加上一些额外信息。这些文件会简单的重复本地文件的树结构。因此,不必担心有什么数据损失,如果必要的话可以手工修改RCS文件。
SVN是基于关系数据库的(BerkleyDB)或一系列二进制文件的(FS_FS)。一方面这解决了许多问题 (如:并行读写共享文件)以及添加了许多新功能(如:运行时的事务特性)。然而另一方面,数据存储由此变得不透明。
2,速度
整体而言,由于架构实现的不同, SVN的确比CVS快很多,在网络上它只传输很少的信息并支持更多的离线模式的功能。速度的代价是巨大的存储(完全备份所有的工作文件)。
3,标志&分支
SVN采用标志和分支,在档案库内部复制文件或目录以便保存日志。SVN里整个仓库都有版本号,但不是针对单个文件。
4, 元数据
CVS只允许存储文件。SVN允许一个文件有任意多的可命名属性,功能十分完全。
5,文件类型
CVS是为文本文件存储而设计的。SVN支持所有的文件类型。
6,回滚
CVS允许任意的回滚,在任意一个已递交的版本上,尽管这要花些时间(所有的文件都要分别处理)。
SVN不允许递交后回滚。建议把版本库里好的状态版本加到末尾,覆盖掉损坏的版本。而损坏的版本无论如何也是会存在数据库里的。(SVN的滚回操作实际上是merge操作)
7,事务
CVS中的“零或一”事务原则根本没有实现。如果检入几个文件的话(加到服务器上),很有可能部分文件完成了,而另几个没有。作为一个潜规则,手工纠正这些并且对余下的文件 (而不是所有文件)一一重复检入。这样这些文件将在两阶段中被检入。SVN支持“零或一”事务原则,这是SVN的一大优势。
一、SVN(Subversion)概述
1,定义
SVN版本控制系统、代码、文档等管理工具,是cvs的接班人。Subversion 初的设计Team定下了几个简单的目标:它必须在功能上可取代 CVS,也是说, 所有 CVS 可做到的事, 它都要能够作到。 在修正明显的瑕疵的同时, 还要保留相同的开发模式。经过十四个月的编码后, Subversion 于2001年8月31日开始实现 “自行管理”,即开发人员不再使用 CVS 来管理 Subversion 的代码, 而以 Subversion 自己来管理。目前,绝大多数开源软件都使用SVN作为代码版本管理软件。SVN = 版本控制 + 备份服务器。简单的说,您可以把SVN当成您的备份服务器,更好的是,他可以帮您记住每次上传到这个服务器的档案内容,并且自动的赋予每次的变更一个版本。 通常我们称用来存放上传档案的地方做Repository。用中文来说,有点像是档案仓库的意思,不过,通常我们还是使用Repository这个名词。基本上,第一次我们需要有一个新增(add)档案的动作,将想要备份的档案放到Repository上面。日后,当您有任何修改时,都可以上传到 Repository上面,上传已经存在且修改过的档案叫做commit,也是提交修改给SVN server的意思。针对每次的commit,SVN server都会赋予他一个新的版本。同时,也会把每次上传的时间记录下来。日后,如果您需要从Repository下载曾经提交的档案。您可以直接选择取得新的版本,也可以取得任何一个之前的版本。如果忘记了版本,还是可以靠记忆尝试取得某个日期的版本。
2,版本模型
所有的版本控制系统都需要解决文件共享的问题 ,怎样让系统允许用户共享信息,而不会让他们因意外而互相干扰?传统的版本控制系统使用锁定-修改-解锁模型,在这种模型里,在一个时间段里版本库的一个文件只允许被一个人修改。首先在修改之前,要“锁定”住这个文件,其他人不能对这个文件做任何修改,在结束编辑并且放开这个锁之前,其他人只可以阅读文件。编辑完解锁后,其他人才可以锁定并且开始编辑这个文件。SVN,CVS和一些版本控制系统使用拷贝-修改-合并模型,在这种模型里,每一个客户联系项目版本库建立一个个人工作拷贝—版本库中文件和目录的本地映射。用户并行工作,修改各自的工作拷贝,终,各个私有的拷贝合并在一起,成为终的版本,这种系统通常可以辅助合并操作,但是终要靠人工去确定正误。需要注意的是软件不能自动的解决冲突,只有人可以理解并作出智能的选择。如果修改冲突,可以看到一对冲突的修改集,并手工的选择保留一组修改。
3,为什么要使用SVN
• SVN Repository可以是PC上一个目录或随身碟,也可以是公司的服务器。
• SVN有很棒的版本控管机制。所有上传的版本都会帮您记录下来,日后您可以随时取得某一个时刻的版本,而且也有版本分支及合并等好用的功能。
• SVN可以让不同的开发者存取同样的档案,并且利用SVN Server作为档案同步的机制。也是说,您有档案更新时,无须将档案寄给您的开发成员。只需要告诉他新的版本已经在SVN Server上面,请他自己去SVN Server上面可以取得新版本。而且,SVN Server也可以做到当您上传新版本后,自动发信给相关的成员。
• SVN的存放档案方式是采用差异备份的方式。也是说,他只会备份有不同的地方。所以很省硬盘空间。此外,他也可以针对所谓的非文字文件进行差异备份。
4,集中式版本管理系统
SVN是一个“集中式”的信息共享系统。版本库是SVN的核心部分,是数据的中央仓库。版本库以典型的文件和目录结构形式文件系统树来保存信息。任意数量的客户端连接到SVN版本库,读取、修改这些文件。客户端通过写数据将信息分享给其他人,通过读取数据获取别人共享的信息。
集中式管理的工作流程如下图: