使用SVN相比于CVS有哪些优势?

66

我的公司使用CVS作为我们的源代码控制的事实标准。然而,我听很多人说SVN更好。

我知道SVN是较新的,但除此之外,我对它的优势不太了解。

我想要的是这两个系统的简明比较,指出在Java/Eclipse开发环境中每个系统的优缺点。

12个回答

67

CVS只能基于文件进行修改跟踪,而SVN则以整个提交作为一个新版本进行跟踪,这意味着更容易跟踪您项目的历史。再加上现代所有源代码控制软件都使用版本概念,因此从SVN迁移要比从CVS迁移容易得多。

同时还有原子提交问题。虽然我只遇到过一次,但在CVS中可能会发生2个人一起提交并相互冲突,导致丢失一些数据并使客户端处于不一致状态。如果早期检测到这些问题,则不是什么大问题,因为您的数据仍然存在于某个地方,但在紧张的环境下可能会很痛苦。

最后,现在已经没有太多围绕CVS开发的工具了。虽然像Git或Mercurial这样的新工具确实还没有足够的工具,但SVN已经在任何系统上有着相当大的应用基础。

编辑2020:说真的,这篇答案已经12年了。忘记SVN,像其他人一样使用Git吧!


1
我想要得到关于Git与Subversion以及Git与Mercurial的相同答案。 - Isaac Rabinovitch
3
"放弃SVN,使用Git":我认为这不是新旧问题或多少人在使用的问题,它们是不同的东西。 - golimar
"说真的,这个回答已经12年了。别再用SVN了,像其他人一样使用Git吧!"| 现在是2022年,我所在的基金会刚刚从Git转向CVS。我猜我们的使用情况/工作流程类似于OpenBSD。 - gsl
1
2020年的修改是误导性的。SVN在处理包含大型二进制文件的大型存储库时确实比git具有一些优势。在这种情况下,由于您只需下载(和上传)需要修改的文件,而不是整个存储库,因此SVN更快。对于新手来说,SVN也更容易掌握。请参阅https://blog.programster.org/advantages-of-svn-over-git。但对于大多数软件开发项目,git通常是更好的选择。 - RobK

19

许多比较之一:

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

这是与该项目特定相关的,但很多东西普遍适用。

Pro Subversion:

  • 支持版本化的重命名/移动(CVS不支持):Fingolfin、Ender
  • 原生支持目录:可以删除它们,并且它们被版本化:Fingolfin、Ender
  • 文件属性已经过版本控制;不再有“可执行位”问题:Fingolfin
  • 整体修订号使得构建版本和回归测试更加容易:Ender、Fingolfin
  • 原子提交:Fingolfin
  • 直观(基于目录)的分支和标记:Fingolfin
  • 更容易的挂钩脚本(预/提交后等):SumthinWicked(我用它来在提交后生成Doxygen文档)
  • 防止意外提交冲突文件:Salty-horse、Fingolfin
  • 支持自定义“diff”命令:Fingolfin
  • 离线差异,即时显示:sev

2
“fingolfin”是什么?在谷歌上搜索这个词只会让人更加困惑。 - DuKes0mE
3
芬戈芬和安德只是该论坛用户的名字:“每个“论点”背后都有一组认同该特定论点有效性的人。” - hinneLinks

15

相比CVS,SVN有三个主要优点:

  • 速度更快
  • 支持二进制文件的版本控制
  • 并添加了事务提交(全部或不提交)

7

《Subversion书籍》有一个附录详细介绍了与CVS的重要区别,这可能有助于您做出决定。这两种方法或多或少是相同的想法,但SVN是专门设计来修复CVS中长期存在的缺陷,因此理论上,SVN将始终是更好的选择。


4
我赞同Eridius关于使用Git的建议,但我会将其扩展到其他DRCS(分布式版本控制系统),如Mercurialbazaar
这些产品相对较新,在工具和集成方面的水平目前似乎较低(基于我的初步研究)。我认为它们最适合那些有能力的开发者(以及在这里的开发者)。
另一方面,CVS目前为您做了什么?从您最初的问题来看,您并没有真正遇到“CVS做不到这一点,我可以使用什么替代品?”的情况。
您必须权衡任何潜在迁移的成本与收益。对于现有项目,我认为很难证明其价值。

4

不要忽视的一件事是生态系统。我曾在一个CVSNT商店工作,发现越来越多的开源工具默认支持SubVersion。


2
顺便提一下:CVSNT 支持原子提交。

2
作为一个正在从CVS转向SVN的人(最初我们使用了cvs2svn将所有项目都转换为SVN,然后决定只在新项目中使用SVN),这里是我们遇到的一些问题。
  • 合并和分支非常不同,如果你经常分支和合并,除非你的服务器上运行的是SVN 1.5,否则必须知道你何时分支(在Tortoise SVN对话框中不太清楚)。Michael说分支和合并很直观,但我认为在使用CVS十年后,它并不是那么直观。
  • 如果你在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。如果你在错误的位置开始你的存储库,你可以清理它,但这会导致混乱。

1

CVS(Concurrent Versions System)和SVN(SubVersioN)是两种版本控制文件系统,广泛用于协作开发的团队。这些系统允许协作者跟踪所做的更改,并知道谁在开发哪个分支以及是否应将分支应用于主干。CVS是其中较早的一个,它一直是许多人的标准协作工具。SVN要新得多,并引入了许多改进,以满足大多数人的需求。


1

你应该看看 Git,而不是SVN。 Git是一个极快速且功能强大的分布式版本控制系统。虽然它不像SVN那么用户友好,但在这方面它正在改进,并且学习起来并不是那么难


您,先生,预测未来的能力真是令人钦佩,值得一枚奖章。 - altinturk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接