svn与cvs的一些比较

Posted cyjack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了svn与cvs的一些比较相关的知识,希望对你有一定的参考价值。


  所有的文档都显示SVN可以取代CVS,同时SVN的问题和缺点都被隐藏了。不幸的是,我们并不认为SVN是CVS的替代品,尽管很多缺陷都被修改了。更有甚者,它甚至让人重回VSS。CVS和SVN的比较类似与比较C++和Java。很明显CVS和SVN都远比SourceSafe强大的多,如同C++和Java比Basic强大的多。CVS代表了几乎代码控制系统的所有功能项,尽管有时他的实现并不很方便。SVN,修正并添加了一些CVS并不拥有功能。例如,创建标志和分支dubious,你在编辑文件是其他人不会有任何通知。这有点象Java的发明者:他们认为你不需要指针他们就在Java里面取消了指针, Java里也没有操作符重载。
SVN并不是CVS的替代品。他只是个不同的系统,类似于CVS。它有些特有的功能,足以作为采用它的理由。这些功能使他更适合于开发环境,例如对 PowerBuilder。下面你可以找到两者的相对优势、劣势。我们假设余下的东西两者没有什么大差别。如果你对两者都举棋不定,我们建议试试两个系统,注意观察下面几个指标。你也可以到网上看看两者之间的讨论。
(https://www.cnblogs.com/legou/articles/1871503.html)

一、主要功能比较

  • (1)目录版本控制

    CVS 只能跟踪单个文件的历史, 不过 Subversion 实作了一个 "虚拟" 的版本控管文件系统, 能够依时间跟踪整个目录的变动。 目录和文件都能进行版本控制。

  • (2)真实的版本历史

    自从CVS限制了文件的版本记录,CVS并不支持那些可能发生在文件上,但会影响所在目录内容的操作,如同复制和重命名。除此之外,在CVS里你不能用拥有同样名字但是没有继承老版本历史或者根本没有关系的文件替换一个已经纳入系统的文件。在Subversion中,你可以增加(add)、删除(delete)、复制(copy)和重命名(rename),无论是文件还是目录。所有的新加的文件都从一个新的、干净的版本开始。

  • (3)自动提交

    一个提交动作,不是全部更新到了档案库中,就是不完全更新。这允许开发人员以逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。

  • (4)纳入版本控管的元数据

    每一个文件与目录都附有一組属性关键字并和属性值相关联。你可以创建, 并儲存任何你想要的Key/Value对。 属性是随着时间来作版本控管的,就像文件內容一样。

  • (5)选择不同的网络层

    Subversion 有抽象的档案库存取概念, 可以让人很容易地实作新的网络机制。 Subversion 可以作为一个扩展模块嵌入到Apache HTTP 服务器中。这个为Subversion提供了非常先进的稳定性和协同工作能力,除此之外还提供了许多重要功能: 举例来说, 有身份认证, 授权, 在线压缩, 以及文件库浏览等等。还有一个轻量级的独立Subversion服务器, 使用的是自定义的通信协议, 可以很容易地通过 ssh 以 tunnel 方式使用。

  • (6)一致的数据处理方式

    Subversion 使用二进制差异算法来异表示文件的差异, 它对文字(人类可理解的)与二进制文件(人类无法理解的) 两类的文件都一视同仁。 这两类的文件都同样地以压缩形式储存在档案库中, 而且文件差异是以两个方向在网络上传输的。

  • (7)有效的分支(branch)与标签(tag)

    在分支与标签上的消耗并不必一定要与项目大小成正比。 Subversion 建立分支与标签的方法, 就只是复制该项目, 使用的方法就类似于硬连接(hard-link)。 所以这些操作只会花费很小, 而且是固定的时间。

  • (8)Hackability

    Subversion没有任何的历史包袱; 它主要是一群共用的 C 程序库, 具有定义完善的API。这使得 Subversion 便于维护, 并且可被其它应用程序与程序语言使用

二、两者的相同与不同之处

  • 1 对重命名、删除文件的支持
   cvs:不支持本地文件重命名提交,删除分remove和erase两种前者把本地和库中文件都删除 后者只是删除本地文件不能删除文件夹 
   svn:支持文件重命名提交系统会提示删除旧文件,创建新文件删除本地文件提交 库中文件也被删除
  • 2 对中文路径名的支持
  cvs:支持的比较好 
  svn:要将权限控制文件保存为svn支持的UTF-8格式3 本地文件与库的对应关系 
   cvs:可以多对多  
  svn:一个库可以有多个工作目录但一个工作目录只能对应一个库 虽然可以更改库位置但是要求很严格4 库中文件存放方式 
   cvs:完全用户可见方式与客户端文件夹结构完全一致(cvs生成文件除外) 
   svn:与vss相似,看不到文件真正的内容5 用户、权限管理 
   cvs:管理员很难清楚的知道一个项目到底有多少个用户各用户的权限和密码是什么 只能用分组的方式管理用户而且密码和权限还是不清晰  
  svn:查看、修改配置文件即可6 权限 
  cvs:有read、write、creat、none这四种权限,任何人不能删除文件夹(admin也只能跑到服务器上把相应文件夹残忍删除?我暂时只知道这个方法…… 
  svn:只有read、write、none三种权限 creat和delete权限好象和write是捆绑在一起的

三、svn优于cvs之处

  • 1、原子提交。一次提交不管是单个还是多个文件,都是作为一个整体提交的。在这当中发生的意外例如传输中断,不会引起数据库的不完整和数据损坏。
  • 2、重命名、复制、删除文件等动作都保存在版本历史记录当中。
  • 3、对于二进制文件,使用了节省空间的保存方法。(简单的理解,就是只保存和上一版本不同之处)
  • 4、目录也有版本历史。整个目录树可以被移动或者复制,操作很简单,而且能够保留全部版本记录。
  • 5、分支的开销非常小。

6、优化过的数据库访问,使得一些操作不必访问数据库就可以做到。这样减少了很多不必要的和数据库主机之间的网络流量。

以上是关于svn与cvs的一些比较的主要内容,如果未能解决你的问题,请参考以下文章

SVN的安装与常用功能使用以及解决安装配置过程中的一些错误

SVN的安装与常用功能使用以及解决安装配置过程中的一些错误

SVN的安装与常用功能使用以及解决安装配置过程中的一些错误

svn是啥工具,如何使用

LinuxSVN的安装和配置

SVN的安装与使用