65

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

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

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

4

12 回答 12

65

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

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

最后,围绕 CVS 开发的工具已经不多了。虽然像 Git 或 Mercurial 这样的新工具和新工具肯定还缺乏工具,但 SVN 在任何系统上都有相当大的应用程序基础。

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

于 2008-08-04T14:17:59.080 回答
19

众多比较之一:

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

现在这是非常特定于该项目的,但很多东西都适用。

专业颠覆:

  • 支持版本化重命名/移动(CVS 不可能):Fingolfin、Ender
  • 原生支持目录:可以删除它们,并且它们是版本化的:Fingolfin、Ender
  • 文件属性是版本化的;不再有“可执行位”地狱:Fingolfin
  • 总体修订号使构建版本控制和回归测试更加容易:Ender,Fingolfin
  • 原子提交:Fingolfin
  • 直观的(基于目录的)分支和标记:Fingolfin
  • 更简单的钩子脚本(提交前/提交后等):SumthinWicked(我在提交后将它用于 Doxygen)
  • 防止意外提交冲突文件:Salty-horse、Fingolfin
  • 支持自定义 'diff' 命令:Fingolfin
  • 离线差异,它们是即时的:sev
于 2008-08-04T14:09:54.993 回答
15

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

  • 它更快
  • 支持二进制文件的版本控制
  • 并添加事务提交(全有或全无)
于 2008-08-04T14:35:12.277 回答
7

Subversion 书有一个附录,详细说明了与 CVS 的重要区别,它可以帮助您做出决定。这两种方法或多或少是相同的想法,但 SVN 是专门为修复 CVS 中长期存在的缺陷而设计的,因此,至少在理论上,SVN 将永远是更好的选择。

于 2008-08-04T14:14:14.877 回答
4

我将支持 Eridius 对 Git 的建议,但我会将其扩展到其他 DRCS(分布式修订控制系统),例如Mercurialbazaar

这些产品是相当新的产品,目前与它们的工具和集成水平似乎很低(基于我最初的研究)。我会说它们最适合那里的电力开发人员(以及这里;-))。

另一方面,CVS 目前没有为您做什么从您最初的问题来看,您实际上并没有任何问题,“CVS 很烂,我可以用什么来代替?”

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

于 2008-08-18T17:04:41.977 回答
4

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

于 2008-08-18T17:22:05.733 回答
2

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

于 2008-08-18T16:22:00.097 回答
2

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

  • 合并和分支是非常不同的,如果你经常分支和合并,除非你的服务器上运行了 SVN 1.5,否则必须知道你何时分支(这在 Tortoise SVN 对话框中不是很清楚)。Michael 说分支和合并是直观的,我认为在使用 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。如果你在错误的地方开始你的回购,你可以清理,但这会导致混乱。
于 2008-09-04T17:44:16.510 回答
1

你应该看看Git而不是 SVN。这是一款速度极快且功能强大的 DVCS。它不像 SVN 那样用户友好,但在这方面正在改进,而且学习起来并不

于 2008-08-06T23:09:43.920 回答
1

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

于 2018-07-17T07:19:01.830 回答
0

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

于 2008-10-08T16:19:04.527 回答
0

好吧,我觉得有几件事让 svn 很棒。

  1. SVN-Altassian 坩埚组合是一种优越得多的审查和质量检查方法
  2. 更好地管理冲突和合并
  3. 进行结帐、执行提交等显然更快。
  4. 原子提交问题 - 在 CVS 中一起提交的 2 个人可能会相互冲突,丢失一些数据并使您的代码库处于不一致的状态

使用 cvs2svn 可以在几个小时内轻松完成迁移。

于 2016-09-18T14:01:16.107 回答