零基础学习SVN之(二):CVS与SVN的区别

相信大家看了零基础学习SVN之(一):SCM与SVN的使用(基础篇)这篇博客之后,对版本控制就有了一定的理解,同时也应该知道SVN与CVS是比较流行的两款SCM工具。那么到底这两款工具有什么区别呢?

  1、版本编号方面

  例如,我们的版本库为A,其中有文件a,b,c。

  在SVN中,新版本的版本号不是针对某个特定文件的,而是针对整个库而言的。提交了5次和提交了6次,文件a有可能不同,也有可能相同,即1.0版和1.1版可能相同。因为第6次提交有可能是因为文件b或c进行了修改。而在CVS中则相反,每次更新可能只对文件的版本号进行修改,即a文件的1.0版和1.1版是肯定不同。

  (在这里纠正一个概念,“文件a的第2版本”这个说法是错误的,应该是“文件a的第2次修改,即第二次Commit”)

  SVN的全局性版本编号为SVN带来了诸多的优势:如对目录或文件执行拷贝,无论涉及多少文件,SVN不需要对单个文件依次执行拷贝命令,仅仅需要建立一个指向相应的全局版本号的一个指针即可。

  2、目录的版本控制

  CVS只能对文件进行版本控制,不能对目录进行版本控制,这就导致CVS失去了很多功能:

  1)没有移动操作

  CVS里没有移动(move)这个操作,当人为进行文件移动操作时,CVS只能注意到,一个文件在一个位置被删除了,而在一  个新位置创建了另外一个文件。由于它不会连接两个操作,因此也很容易使文件历史轨迹丢失。所以使用CVS时,每个文件的位置一定要谨慎的选择。

  2)没有重命名操作

  CVS里没有重命名(rename)这个操作,人为的对文件进行重命名会使得命名前后的文件失去历史联系,而记录历史本来是版本管理的主要目的。

  3)没有拷贝操作

  CVS中没有拷贝(copy)这个操作,人为的拷贝对CVS而言,只能看到新的文件的增加,而不能记录拷贝源文件和目标文件之间的联系。

  而SVN从很大程度上避免了这些不足,SVN将目录作为一类特殊的文件来处理。当目录中的子目录/文件被删除、重命名、或新的子目录/文件被创建时,目录的内容将发生改变。因此,SVN象记录普通文件的修改历史一样记录对目录的修改历史,当发生文件/目录的移动、重命名或拷贝操作时,SVN能够准确记录操作前后的历史联系。同样,像对文件的不同历史版本进行比较一样,SVN支持对目录的不同历史版本的比较,清晰展现目录的变化历史。

  3、原子性提交

  CVS和SVN同样作为SCM版本控制管理工具,SVN的原子性提交可谓是技高一筹啊!

  SVN提交文件,只有当全部文件修改都成功入库,该提交才变得有效。一旦中断,SVN将会自动执行“回滚”(rollback)操作。SVN 这种机制保证所有的修改要么全部入库生效,要么一个也不入库。由于SVN的原子性提交特性和全局版本编号方式,当提交成功完成时,一个唯一的、新的全局版本编号产生,而提交时用户提供的日志信息与该新的版本编号关联,只进行一次存储(区别于CVS的按文件重复存储)。

而CVS则采用线性、串行的批量提交,即依次地,一个接一个地执行提交,每成功提交一个文件,该文件的一个新的版本即被记录到版本库中。但当任何原因造成批量操作的中断时,版本库往往处于一个不一致的状态。另外,CVS即使在批量提交不发生中断时也会造成不一致:假设用户A启动一个需要较长时间才能完成的批量提交;与此同时,用户B执行cvsupdate操作。此时,用户B很有可能得到一个不一致的更新,即用户B通过“更新”操作,得到用户A的部分修改文件。

  4、变更集概念的支持

  由于SVN提交是原子性的,每次成功提交形成的唯一的全局版本号对应此次批量提交的所有文件修改,也就是说,一个SVN版本号其实对应了一个逻辑上的变更集,该变更集可能对应于对一个BUG的修复,或者对应于对一个已有功能的改进,或者对应于一个新功能的实现。可以说,变更集是一个软件开发活动的逻辑结果,该变更集可以通过其对应的版本号在软件开发的其他过程中(如软件合并/集成过程,软件发布管理,变更管理系统,缺陷追踪系统)被引用。因此,SVN将版本管理从单纯的、单个的文件修改的层次通过逻辑上的抽象,上升到更便于理解和交流的开发活动的层次。

  5、差异化的二进制文件处理

  CVS最初设计是为处理文本文件(或ASCII文件,源代码文件),对文本文件进行差异化的存储、新旧版本的比较,文件合并等。但对于二进制文件,CVS则明显力不从心。在CVS的版本库中,对于二进制文件的历史版本,CVS是对不同的版本进行独立的、冗余的存储,哪怕版本之间其实只存在微小的差异。与CVS不同,SVN每次提交后版本库中只存储相对于先前版本的差异,从而可以节省大量的存储空间。更为重要的是,当客户端需要获取新的版本时,SVN只传输版本的差异,从而大大减少对网络带宽的消耗。

  说了这么多,好像全是在说SVN得优点,其实它也不是那么完美。下面来分析一下SVN的一些不足之处。

  1)对中文路径名的支持

  cvs:支持的比较好

  svn:要将权限控制文件保存为svn支持的UTF-8格式

  2)本地文件与库的对应关系

  cvs:可以多对多

  svn:一个库可以有多个工作目录,但一个工作目录只能对应一个库,虽然可以更改库位置但是要求很严格。

  3)库中文件存放方式

  cvs:完全用户可见方式与客户端文件夹结构完全一直(cvs生成文件除外)

  svn:看不到文件真正的内容

相关链接:

零基础学习SVN之(一):SCM与SVN的使用(基础篇)

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-11-08 22:57:10

零基础学习SVN之(二):CVS与SVN的区别的相关文章

怎样从零基础学习EXCEL?

  怎样从零基础学习EXCEL?          后来工作会对你的数据处理能力提出要求(除非你懒,错过了那么好的学习机会).可能开始的时候,你会发现一个函数能自动计算求和(sum),能算平均数(average),你就很开心了.接下来你会发现经常要从一个表里面寻找另一个表里面的内容(vlookup就很有用),有时候很多要做条件(if函数就很有用). 其实到这里就能解决大概80%的工作问题了.就几个函数不会很难吧,特别是当你发现以前要好久的时间,现在很快就完成了.至于以后的深入学习就看你的工作是否

零基础 女孩子-女孩子零基础学习运维

问题描述 女孩子零基础学习运维 我是个女孩子 马上大学毕业面临就业 想去培训学点一技之长 还有三个月就去了 不想什么都不会得去学习 听说运维相比于嵌入式还是比较容易接受的 有木有大神可以给俺指点迷津 基于零基础学习运维 推荐个具体应该完成的科目表 学到什么程度 现在在啃鸟哥这本书 很厚 ...金币很少 望见谅 解决方案 没这样的说法,女生学习任何东西和男生没有什么分别,既不更难也不更简单.不过相对来说,女生就业面临的性别歧视是存在的,因此需要比男生更多的努力才行. 任何行当都和你付出的学习成本成

零基础学习AJAX之AJAX框架_AJAX相关

上文(零基础学习AJAX之AJAX的简介和基础)对ajax异步请求服务器做了详细的介绍和基础应用,可以看出,ajax的一些过程是相对不变的.不必要每次发送请求都写一遍发送代码,一些ajax开发人员已经把他们的过程封装成ajax框架. 本节主要介绍ajaxLib和ajaxGold两款框架. 1.ajaxLib ajaxLib是一个非常小巧的ajax框架. 使用它首先将文件使用引入到页面中.改框架是一个直接获取XML的框架,调运函数如下: loadXMLDoc(url,callback,boolea

【J2ME 2D 游戏开发系列】◣HIMI游戏开发启蒙教程◢JAVA零基础学习J2ME游戏开发全过程!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/j2me-2/774.html Himi从写博客的最早开始就是Android游戏开发相关的,其实那么很多童鞋也知道Himi是做Java-J2me/Kjava出身,所以不少童鞋还在问我是否可以写一些J2me的相关游戏开发博文.虽然j2me趋势随着Nokia的没落和Android的崛起已经慢慢被弱化掉,但是J2me也是早些年非常火的平台不是么!

零基础学习AJAX之AJAX框架

上文(零基础学习AJAX之AJAX的简介和基础)对ajax异步请求服务器做了详细的介绍和基础应用,可以看出,ajax的一些过程是相对不变的.不必要每次发送请求都写一遍发送代码,一些ajax开发人员已经把他们的过程封装成ajax框架. 本节主要介绍ajaxLib和ajaxGold两款框架. 1.ajaxLib ajaxLib是一个非常小巧的ajax框架. 使用它首先将文件使用引入到页面中.改框架是一个直接获取XML的框架,调运函数如下: loadXMLDoc(url,callback,boolea

零基础学习SVN之(一):SCM与SVN的使用(基础篇)

今天用了一点时间看了看SVN的视频,发现很多东西还是要学习基础的,之前虽说在用SVN,但今天看完视频之后还是收获很大. 要学习SVN,首先得知道SCM(Software Configuration Mangement)软件版本控制管理.我们大家都知道,一款软件从开始着手到完成发布,中间一定有很多不同的版本,那么如何管理好这些版本呢?作为SCM的一个工具,SVN给我们提供了很好的解决办法. SCM要解决的问题: 1.如何把大家的代码合并的一起. 2.多平台的支持. 3.版本之间的不同 SCM的核心

一个零基础学习Python应该知道的学习步骤与规划

很多初学Python的同学都面临着很多的疑问,在之前的文章中我大致的很多问题我已经进行了讲解,无论你是编程零基础.数学,英语不错.还是说没有一个好的学习路线和学习规划等等,我都给大家进行了一个讲解 今天呢给大家讲以下问题:很多人都在问Python学习步骤应该如何安排?多长时间可以达到精通呢? Python学习步骤应该怎样安排: 首先,学习Python编程技术,自学或者参加培训学习都适用,每个人都有自己的学习方式和方法. 一:明确自己的学习目标. 不管我们学习什么样的知识,都要对自己的学习目标有一

Bootstrap零基础学习第一课之模板_javascript技巧

最近需要做一个简单的Web页面.  考虑到前端经验不足,为了快速产出,同时项目只是一个工具,对项目没有什么要求,所以我选择了Bootstrap这个框架作为Web框架.  写从零开始学Bootstrap的初衷:  看了半天的Bootstrap的文档,包括官方的(http://v3.bootcss.com/getting-started/)和非官方的(http://www.runoob.com/bootstrap/bootstrap-tutorial.html),以及他人写的简单入门博客(http:

cvs转换svn的问题-cvs转换svn时出现异常的问题

问题描述 cvs转换svn时出现异常的问题 cvs转换svn时 python cvs2svn -s f:svnbjhmcms e:HMCMS --encoding=gbk --fallback-encoding=utf-8 执行此命令出现以下错误 ERROR: svnadmin failed with the following output while loading the dumpfile: svnadmin: E125005: Invalid property value found i