关于版本控制:与CVS相比,使用SVN有哪些优势?

关于版本控制:与CVS相比,使用SVN有哪些优势?

What are the advantages of using SVN over CVS?

我的公司正在使用CVS作为我们事实上的源代码控制标准。但是,我听到很多人说SVN更好。

我知道SVN较新,但除此之外,我不了解它的好处。

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


CVS仅按文件跟踪修订,而SVN则将整个提交作为新修订进行跟踪,这意味着更容易跟踪项目的历史记录。再加上所有现代源代码控制软件都使用修订的概念,因此从SVN迁移比从CVS迁移要容易得多。

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

最后,围绕CVS开发的工具不多了。虽然像Git或Mercurial这样的新工具确实缺少工具,但SVN在任何系统上都有相当大的应用程序。

EDIT 2020:说真的,这个答案现在已经12岁了。忘记SVN,像其他人一样使用Git!


众多比较之一:

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

现在这是非常特定于该项目的,但是通常有很多内容。

专业版Subversion:

  • Support for versioned renames/moves (impossible with CVS): Fingolfin, Ender
  • Supports directories natively: It's possible to remove them, and they are versioned: Fingolfin, Ender
  • File properties are versioned; no more"executable bit" hell: Fingolfin
  • Overall revision number makes build versioning and regression testing much easier: Ender, Fingolfin
  • Atomic commits: Fingolfin
  • Intuitive (directory-based) branching and tagging: Fingolfin
  • Easier hook scripts (pre/post commit, etc): SumthinWicked (I use it for Doxygen after commits)
  • Prevents accidental committing of conflicted files: Salty-horse, Fingolfin
  • Support for custom 'diff' command: Fingolfin
  • Offline diffs, and they're instant: sev

与CVS相比,SVN具有3个主要优势

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

Subversion本书的附录详细介绍了与CVS的重要区别,这可能有助于您做出决定。两种方法大致相同,但是SVN是专门为修复CVS中长期存在的缺陷而设计的,因此,至少从理论上讲,SVN永远是更好的选择。


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


我将支持Eridius对Git的建议,但将其扩展到其他DRCS(分布式修订控制系统),例如Mercurial和义卖市场。

这些产品是相当新的产品,目前的工具和与它们的集成度似乎很低(根据我的初步研究)。我想说的是,它们最适合那里的电源开发人员(在这里;-))。

另一方面,CVS当前不为您做什么?从最初的问题开始,您实际上并没有任何问题," CVS很烂,我该怎么用呢?"

您必须权衡任何潜在迁移的成本与收益。对于一个现有项目,我认为很难证明其合理性。


作为一个正在CVS和SVN之间切换的人(最初我们使用cvs2svn切换了所有项目,然后决定只在新项目上使用svn进行过渡),这是我们遇到的一些问题拥有。

  • 合并和分支非常不同,并且如果您经常分支和合并,除非您在服务器上运行了SVN 1.5,否则必须知道分支的时间(在Tortoise 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。如果您在错误的位置启动存储库,则可以清理,但是这会导致混乱。

btw:CVSNT支持原子提交


CVS(并行版本系统)和SVN(SubVersioN)是两个版本控制文件系统,在单个项目中进行协作的团队通常使用它们。这些系统使协作者可以跟踪所做的更改,并知道谁在开发哪个以及是否应将分支应用于主干。 CVS是两者中比较老的版本,它已成为很多人的标准协作工具。 SVN较新,它引入了许多改进来满足大多数人的需求。


您应该看看Git而不是SVN。 DVCS快速而强大。它不像SVN那样用户友好,但是在这方面它正在改进,并且学习起来也不难。


好吧,我觉得有些事情使svn很棒。

  • SVN-阿尔塔斯坩埚组合是一种非常出色的审查和质量检查方法
  • 更好地管理冲突和合并
  • 显然,结帐,执行提交等操作更快。
  • 原子提交问题-在CVS中一起提交的2个人可能会相互冲突,丢失一些数据并使您的代码库处于不一致状态
  • 使用cvs2svn可以在几个小时内轻松完成迁移。


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


    推荐阅读