我的公司正在使用 CVS 作为我们事实上的源代码控制标准。但是,我听到很多人说 SVN 更好。
我知道 SVN 较新,但除此之外,我不熟悉它的好处。
我正在寻找的是对这两个系统的良好、简洁的比较,并指出每个系统在 Java/Eclipse 开发环境中的优点或缺点。
我的公司正在使用 CVS 作为我们事实上的源代码控制标准。但是,我听到很多人说 SVN 更好。
我知道 SVN 较新,但除此之外,我不熟悉它的好处。
我正在寻找的是对这两个系统的良好、简洁的比较,并指出每个系统在 Java/Eclipse 开发环境中的优点或缺点。
CVS 仅在逐个文件的基础上跟踪修改,而 SVN 将整个提交作为新修订跟踪,这意味着更容易跟踪项目的历史。加上所有现代源代码控制软件都使用修订的概念,因此从 SVN 迁移比从 CVS 迁移要容易得多。
还有原子提交问题。虽然我只遇到过一次,但在 CVS 中一起提交的 2 个人可能会相互冲突,丢失一些数据并使您的客户端处于不一致的状态。如果及早发现,这些问题并不严重,因为您的数据仍然存在于某个地方,但在压力大的环境中可能会很痛苦。
最后,围绕 CVS 开发的工具已经不多了。虽然像 Git 或 Mercurial 这样的新工具和新工具肯定还缺乏工具,但 SVN 在任何系统上都有相当大的应用程序基础。
编辑 2020:说真的,这个答案现在已经 12 岁了。忘记 SVN,像其他人一样使用 Git!
众多比较之一:
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
SVN 与 CVS 相比有 3 个主要优势
Subversion 书有一个附录,详细说明了与 CVS 的重要区别,它可以帮助您做出决定。这两种方法或多或少是相同的想法,但 SVN 是专门为修复 CVS 中长期存在的缺陷而设计的,因此,至少在理论上,SVN 将永远是更好的选择。
不可忽视的一件事是生态系统。我在一家 CVSNT 商店工作,我发现越来越多的开源工具默认支持 SubVersion。
顺便说一句:CVSNT 支持原子提交
作为一个正在 CVS 和 SVN 之间切换的人(最初我们用 cvs2svn 切换了我们所有的项目,然后决定在新项目上只使用 svn 进行转换),这里是我们遇到的一些问题。
你应该看看Git而不是 SVN。这是一款速度极快且功能强大的 DVCS。它不像 SVN 那样用户友好,但在这方面正在改进,而且学习起来并不难。
CVS(并发版本系统)和 SVN(SubVersioN)是两个版本控制文件系统,在单个项目上进行协作的团队普遍使用。这些系统允许协作者跟踪所做的更改并知道谁在开发哪个以及是否应将分支应用于主干。CVS 是两者中较老的一个,它一直是很多人的标准协作工具。SVN 更新很多,它引入了很多改进来满足大多数人的需求。
您也可以选择仅将最新代码从 CVS 迁移到 SVN 并冻结您当前的 CVS 存储库。这将使迁移更容易,您还可以在旧的 CVS 存储库中构建旧版本。
好吧,我觉得有几件事让 svn 很棒。
使用 cvs2svn 可以在几个小时内轻松完成迁移。