Subversion与CVS

时间:2008-10-28 23:44:22

标签: svn version-control cvs

我已经同时使用了SVN和CVS,但需要为我将要开始的新项目选择一个。

任何广泛使用过的人都可以提供一些优点和缺点,他们认为哪个更好?最好的学习资源也将受到赞赏。

这将是一个小项目,只有一两个开发人员可以开始。

8 个答案:

答案 0 :(得分:68)

我用过两者。没有比较;你想要svn。使用CVS的唯一原因是因为您正在进入或接管具有不想改变现状的管理的遗留系统。如果您正在开始一个新项目,那么认为CVS优于Subversion实际上是不可能的。

如果你在谷歌周围,你应该找到大量的比较,以及使用Subversion而不是CVS的理由。 Subversion相对于CVS的一些优点:

  • 可以干净地移动或重命名文件或目录
  • 原子提交
  • “便宜”复制和分支
  • 提交是整个树上的变更集(不仅仅是单个文件的历史记录)

说完这一切之后,我建议你也探索一些像Bazaar,Mercurial和git这样的分布式VCS。我个人在我的所有项目中使用git。

答案 1 :(得分:22)

Subversion在CVS方面有一些实质性的胜利:

  1. 良好的远程选项http / https / svn vs pserver
  2. 原子提交
  3. 无所不在的工具支持
  4. 重命名
  5. 目录版本控制
  6. 然而它有严重的缺点。到目前为止,最大的分支和标签不是svn中的一等公民,它们只是遵守惯例的目录。除了失去真正的分支和标记的一些好处(在其他评论中提到)之外,它产生的最大问题是如果让它变得非常容易搞砸了。

    Subversion使用约定而不是配置意味着您需要提前考虑您的存储库结构并确保每个人都遵守它。此外,你为后代创造了一个受伤的世界,更不用说任何需要了解你的回购的工具。

    1.5之前的合并和镜像几乎不存在(很好的帮助)。 1.5已采取措施解决这两个问题,但仍有改进的余地。颠覆中的融合仍然比它需要的更难。

    SVN over CVS几乎是不费吹灰之力的。但是,你至少要考虑DVCS必须提供的东西(Git,Hg,Bzr),或者你的预算是否允许商业工具具有良好的声誉(Accurev,Perforce)。

    Subversion可能是正确的选择,但你必须做好功课才能获得最佳效果。从红皮书http://svnbook.red-bean.com/

    开始

答案 2 :(得分:14)

虽然在大多数情况下我会选择Subversion而不是CVS,但你应该知道Subversion缺少什么:

  • CVS将标签和分支视为不同的东西; Subversion没有。这意味着构建在Subversion之上的第三方工具(例如具有源代码控制集成的IDE)在了解差异方面有更难的工作。您通常需要进行一些特殊配置来告诉它您的标签和分支在哪里,并且您必须确保您的用户坚持使用某种文件系统布局。

  • Subversion无法查看文件并告诉您何时有人从中创建了分支或标记。像CVSGraph这样的工具可以使用此信息绘制文件历史记录的树。要使用Subversion执行此操作,您需要搜索所有分支/标记目录,并且我还没有看到任何可以很好地完成此任务的工具。

  • 根据我的经验,CVS已存在更长时间,第三方工具更稳定。

答案 3 :(得分:8)

叫我老式,但我更喜欢CVS下的分支/标记模型。

在CVS中,分支和标签是不同的东西。标签是修订的标签。它们对于标记要与您的网络服务器同步的文件的 PRODUCTION 标记之类的内容非常有用。您无需合并即可更新 PRODUCTION 文件 - 只需移动代码即可。

分支与主文件位于相同的“命名空间”中 - 可以轻松跟踪特定文件的所有模块。

在SVN中没有标签这样的东西。只有分支机构。如果你想要标签,你需要创建一个分支并假装它是一个标签。分支基本上是文件的副本。上次我使用SVN进行分支/合并时,你必须记录预分支文件的修订版,如果你希望将它合并在一起(注意,我不是SVN专家,所以这可能已经改变了)。

话虽这么说,我认为SVN在其他方面都更好,你可能不应该用CVS开始一个新项目。

答案 4 :(得分:2)

我怀疑你会得到很多答案。他们甚至可能都同意。

在这两个选择之间,我相信你应该使用Subversion。 Subversion被构建为“更好的CVS”,因此,没有人主动维护CVS。 Subversion能够重命名和移动文件而不会丢失历史记录,支持原子提交,具有更强大的存储库格式,具有更多现代访问方法,具有更好的第三方工具支持,并且列表仍在继续。

答案 5 :(得分:1)

颠覆就像是一个“更好的CVS”。它可以很好地处理文件和目录。它具有分支支持,但不如分布式VCS。

您也可以考虑使用像git,bazaar或mercurial这样的分布式VCS。

编辑:这是link to a similar question

答案 6 :(得分:1)

一般是Subversion ..但是你应该注意资源问题。

当我在一家游戏公司工作时,我们有一些包含数百个小文件的目录,以及包含几百兆文件的其他目录。当我们从CVS换到Subversion时,检查回购的速度从一小时减少到四五个小时。更新也非常缓慢。

与原生csv pserver相比,这几乎可以肯定是由于使用http或ssh来传输文件数据,但是由于在ssh或webdav上设置svn非常容易,所以人们往往不会考虑协议开销。但是,您可以使用本机svn协议,这可以解决问题,我们没有在我的旧公司测试。

经常被忽略的另一个问题是存储空间,我们发现subversion确实使用了几倍于CVS的本地存储空间。我似乎记得它存储了repo数据的本地副本以加速diffing,这不会是一个大问题,除非你在你的存储库中存储几千兆字节。

答案 7 :(得分:0)

我已经使用了3。3年的颠覆,现在我转移到使用CVS进行源代码管理的其他公司。起初,两者之间没有太多差异,但是合并操作(这是我最关注的问题)我可以说CVS做得更好。 SVN中分支/标签的概念令人困惑,而在CVS中非常清楚。合并(在我的情况下,集成一个分支)在CVS中比在SVN中容易得多。 到目前为止,CVS的弱点仅在于原子提交。否则,这将是一个不错的选择。