2008-08-04 96 views
54

我的公司正在使用CVS作为我们事实上的源代码控制标准。不过,我听到很多人说SVN比较好。使用SVN比CVS有什么优势?

我知道SVN是更新的,但除此之外,我不熟悉它的好处。

我在寻找的是这两个系统的一个很好的,简洁的比较,指出了Java/Eclipse开发环境中每个系统的优缺点。

回答

52

CVS只跟踪逐个文件的修改,而SVN跟踪整个提交作为新版本,这意味着更容易跟踪项目的历史。添加所有现代源代码控制软件都使用修订概念的事实,因此从SVN迁移要比从CVS迁移要容易得多。

还有原子提交问题。虽然我只遇到过一次,但可能会有两个人在CVS中一起犯下相互冲突,丢失一些数据并使您的客户处于不一致的状态。当发现时间较早时,这些问题并不重要,因为您的数据仍然存在于某处,但在压力较大的环境中可能会很痛苦。

最后,围绕CVS开发的工具并不多。虽然像Git或Mercurial这样新的有创意的工具肯定缺乏工具,但SVN在任何系统上都有相当大的应用程序基础。

编辑2015:说真的,这个答案现在是7岁。忘记SVN,像其他人一样使用Git!

+1

我想要git vs subversion和git vs mercurial的相同答案 – 2017-01-15 20:12:06

18

在众多比较:

http://wiki.scummvm.org/index.php/CVS_vs_SVN

现在,这是非常具体到该项目,但很多一般的东西apllies的。

临颠覆:

  • 支持版本的重命名/移动(不可能CVS):芬国昐,安德
  • 支持目录本身:这是可能的,除去他们,他们是版本:芬国昐, Ender
  • 文件属性是版本化的;没有更多的“可执行位”地狱:芬国昐
  • 总体版本号使构建版本测试和回归测试要容易得多:安德,芬国昐
  • 原子提交:芬国昐
  • 直观(基于目录的)分支和标签:芬国昐
  • 更容易钩子脚本(前/后提交等):SumthinWicked(我用它的Doxygen提交后)
  • 防止意外的冲突的文件提交:咸马,芬国昐
  • 支持自定义“差异”命令:芬国昐
  • 离线的diff,而且他们瞬间:SEV
+1

什么是“fingolfin”?谷歌搜索使得它更容易混淆 – DuKes0mE 2015-05-15 12:57:39

+1

Fingolfin和Ender只是该论坛的人物名称:“每个参数背后都有一份同意这个特定论证是有效的人的名单。 ` – hinneLinks 2015-07-06 07:02:12

7

Subversion的书中有an appendix,详细介绍从CVS重要的区别,这可以帮助你做决定。这两种方法或多或少都是一样的想法,但是SVN专门用于解决CVS中长期存在的缺陷,所以从理论上讲,SVN将永远是更好的选择。

14

SVN拥有CVS 3个主要优点

  • 它的速度更快
  • 支持的二进制文件
  • 版本,并增加了交易提交(全有或全无)
0

你应该看一看在Git而不是SVN。这是一个非常快速和非常强大的DVCS。它不像SVN那么友好,但它在这方面有所改进,而且它不是难以学习的。

1

BTW:CVSNT支持原子提交

2

我第二次的Git Eridius'的建议,但我会扩大到其他DRCS(分布式版本控制系统),如Mercurialbazaar

这些产品相当新近,与他们的工具和整合水平似乎低(根据我的初步研究)。我会说他们最适合那里的权力开发者(和这里;-))。

另一方面,什么 CVS目前为您做?从你最初的问题来看,你真的没有任何问题,“CVS在这个问题上很糟糕,我可以用什么来代替?”

您必须权衡任何潜在的迁移与收益的成本。对于现有的项目,我认为这很难说明问题。

4

有一点不可忽视的是生态系统。我在一家CVSNT商店工作,默认情况下,我发现越来越多的开源工具支持SubVersion。

2

作为一个在CVS和SVN之间切换的人(最初我们用cvs2svn切换了所有的项目,然后决定在新项目中只使用svn),下面是一些问题,我们有过。

  • 合流分支有很大的不同,如果你分支机构和频繁合并,除非你有SVN 1.5的服务器上运行要知道,当你支(这是不是在乌龟SVN对话框很清楚)。迈克尔说分支和合并是直观的,我认为在使用CVS 10年后,事实并非如此。
  • 如果您在Linux上运行SVN服务器,则可能很难让您的SA转移到svn 1.5,因为默认安装1.4.x.
  • 在TortoiseSVN中合并冲突并不像TortoiseCVS那样容易或者不明显(至少对我和我的同事来说)。三窗格方法需要一些习惯和WinMerge(我的首选合并工具)不做三窗格合并。
  • 请注意:我读过的很多在线教程和杂志文章显然不支持并合并,您应该将主要存储库设置为https://svn.yoursvnserver.com/repos/YourProject/Trunk,并将分支设置为https://svn.yoursvnserver.com/repos/YourProject/Branches/BranchX。如果您在错误的地方开始回购,可以清理干净,但会导致混淆。
0

您可能还会选择将最新的代码从CVS迁移到SVN并冻结您当前的CVS回购。这将使迁移变得更加容易,并且您还可以在旧的CVS回购中构建旧版本。

0

好吧,我觉得有些东西让svn真棒。

  1. 的SVN-Altassian坩埚组合是审查和质量检查的冲突
  2. 更好地管理的远远优于方法和合并
  3. 这显然更快采取检出,进行提交,等
  4. 的原子提交问题 - 有可能CVS中的两个人一起犯下相互冲突,丢失一些数据并将您的代码库置于不一致状态

Migra使用cvs2svn可以在几个小时内轻松完成。

相关问题