Subversion vs CVS

我已经使用SVN和CVS一点点,但将需要select一个新的项目,我将开始。

任何人都可以广泛使用,请提供一些优点和缺点,他们认为哪个更好? 最好的学习资源也将不胜感激。

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

我用过两个 没有比较; 你想要svn。 使用CVS的唯一原因是因为您正在进入或接pipe一个不想改变现状的pipe理的遗留系统。 如果你正在开始一个新的项目,那么说CVS比Subversion更好是不合逻辑的。

如果你在谷歌周围,你应该find大量的比较,以及在CVS上使用Subversion的理由。 颠覆CVS的一些优点:

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

说完这一切之后,我build议你也去探索一些分布式VCS,比如Bazaar,Mercurial和git。 我个人在我的所有项目上都使用git。

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

  1. 好的远程选项http / https / svn vs pserver
  2. primefaces提交
  3. 无处不在的工具支持
  4. 改名
  5. 目录版本控制

但是它有严重的缺点。 目前最大的分支和标签不是svn中的一等公民,它们只是遵循惯例的目录。 除了失去真正的分支和标签(在其他评论中提到)的一些好处,它造成的最大的问题是,如果使它很容易搞砸。

Subversion使用惯例而不是configuration意味着你需要事先考虑你的存储库结构,并确保每个人都遵守它。 否则,你为后代创造了一个受到伤害的世界,更不用说任何需要讨论你的回购的工具。

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

SVN上CVS几乎是一个明智之举。 然而,如果你的预算允许有很好的商业工具(Accurev,Perforce),那么你至less不会考虑DVCS提供什么(Git,Hg,Bzr)。

Subversion可能是正确的select,但是你必须做好功课以获得最好的结果。 从红皮书http://svnbook.red-bean.com/开始;

尽pipe在大多数情况下我会selectCVS的Subversion,但是你应该知道你在Subversion中缺less的东西:

  • CVS把标签和分支视为不同的东西; Subversion没有。 这意味着build立在Subversion之上的第三方工具(例如集成了源代码控制的IDE)在了解其差异性方面有着更难的工作。 通常你必须做一些特殊的configuration来告诉它你的标签和分支是在哪里,你必须确保你的用户坚持特定的文件系统布局。

  • Subversion不能查看一个文件,并告诉你什么时候有人创build了一个分支或标签。 像CVSGraph这样的工具可以使用这些信息来绘制一个文件历史树。 要使用Subversion来做到这一点,你需要search所有的分支/标签目录,我还没有看到任何工具可以做到这一点。

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

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

在CVS中,分支和标签是不同的东西 。 标签是修订的标签。 它们对于标记文件的PRODUCTION标记以同步到您的networking服务器是非常有用的。 您不必合并更新PRODUCTION文件 – 只需移动标签即可。

分支与主文件位于同一个“命名空间”中 – 很容易追踪特定文件的所有模块。

在SVN中没有标签这样的东西。 只有分支。 如果你想要标签,你需要创build一个分支并假装它是一个标签。 分支基本上是文件的副本。 上次我使用SVN进行分支/合并时,如果您希望将SVN合并到一起(请注意,我不是SVN专家,因此可能已更改),您必须logging预分支文件的修订版本。

话虽如此,我认为SVN在其他方面都比较好,你可能不应该用CVS开始一个新的项目。

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

在这两种select之间,我认为你应该使用Subversion没有任何问题。 Subversion被build立为“更好的CVS”,因此没有人再积极维护CVS。 Subversion能够在不丢失历史的情况下重命名和移动文件,支持primefaces提交,具有更强大的存储格式,更现代的访问方法,更好的第三方工具支持,并且名单不断涌现。

Subversion就像是一个更好的CVS。 它处理移动文件和目录。 它具有分支支持,但不如分布式VCS。

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

编辑:这是一个类似的问题的链接

一般颠覆..但是,你应该警惕资源问题。

当我在一家游戏公司工作时,我们有几个包含数百个小文件的目录,以及其他包含几百个meg文件的目录。 当我们从CVS交换到Subversion时,检出回购的速度从一个小时减less到四五个小时。 更新也大幅放缓。

这几乎可以肯定是由于使用http或者ssh来传输文件数据,与原生的csv pserver相比,然而由于svn通过ssh或者webdav很容易设置,所以人们往往不去考虑协议开销。 但是,你可以使用本地的svn协议,这应该可以缓解这个问题,但是我们并没有在我的老公司进行testing。

另外一个经常被忽略的问题是存储空间,我们发现颠覆确实使用了几倍于CVS的本地存储。 我似乎回想起来,它存储了回购数据的本地副本以加速差异化,除非您在存储库中存储几千兆字节,否则这不会是一个大问题。

我已经使用了3.5年的颠覆,现在我转移到了其他使用CVS进行源代码pipe理的公司。 起初,这两者之间并没有太多的区别,但是合并操作(这是我最担心的问题),我可以说CVS做得更好。 SVN中的分支/标签的概念令人困惑,而CVS则非常清晰。 在CVS中合并(在我的情况下,集成一个分支)要比在SVN中容易得多。 CVS的弱点在我看来只是primefaces提交。 否则,这将是不错的select。