与CVS相比,使用SVN有什么优势?

时间:2020-03-05 18:37:32  来源:igfitidea点击:

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

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

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

解决方案

回答

许多比较之一:

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

回答

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

回答

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

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

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

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

回答

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

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

回答

我们应该看看Git而不是SVN。这是DVCS,速度非常快,功能非常强大。它不像SVN那样方便用户使用,但是在这方面它正在改进,而且学习起来也不难。

回答

顺便说一句:CVSNT支持原子提交

回答

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

这些产品是相当新的产品,目前工具和与之集成的水平似乎较低(根据我的初步研究)。我想说的是,它们最适合那里的电源开发人员(以及此处的-)。

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

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

回答

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

回答

在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。如果我们在错误的位置启动存储库,则可以清理,但是这会导致混乱。

回答

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