繁体   English   中英

与 CVS 相比,使用 SVN 有哪些优势?

[英]What are the advantages of using SVN over CVS?

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

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

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

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

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

最后,围绕 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

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

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

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

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

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

在另一方面,有什么不会的CVS目前做的吗? 从你最初的问题来看,你真的没有任何疑问,“CVS 在这方面很糟糕,我可以用什么来代替?”

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

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

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

作为一个在 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 如果你在错误的地方开始你的回购,你可以清理,但这会导致混乱。

你应该看看Git而不是 SVN。 这是一款速度极快且功能强大的 DVCS。 它不是用户友好为SVN,但它提高了在这方面,它并不学。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM