大约 2 周前,我们在我的工作中从 CVS 迁移到 Mercurial。我们是一个6人的小团队。在迁移之前,我们中只有两个人已经使用过 CVS 以外的东西。
我负责选择新的 CVS。我考虑过 Git 和 Mercurial。
我们在 CVS 中遇到的一些问题是分支可能性很差,不支持重命名,冲突算法非常糟糕。
我从来没有考虑过 SVN,因为过去我每次尝试将它与分支一起使用时,合并总是令人头疼。坦率地说,这些天所有的炒作都是为了 dvcs,这一定是有原因的 ;)
在 Git 和 Mercurial 之间,更多的是个人选择。我爱上了 Mercurial,因为我发现它比 Git 更容易学习,而且更不以“真正的大项目”为导向。
Git / Mercurial 优于 SVN
-
更好的分支和合并能力(真的是最重要的原因)
- 可以通过电子邮件等方式以捆绑包的形式导出/导入补丁
- 没有对此进行广泛的测试,但我认为 两者都比 SVN 更快(合并、克隆、差异等)
- 开发更加活跃,我听说SVN团队正在努力前进,但仍然如此。
- 非常好的扩展基础架构
- 附带的 Web 服务器功能,对于快速共享某些内容非常有用。
即使您说“除了它们是分布式的”,我认为这确实是一个杀手级功能。 DVCS 允许一些非常简洁的东西,一开始它可能看起来没什么用,但是一旦你用过它们,你就离不开它们;)
学习曲线
团队中有两个人对这一变化并不满意。但是用一些幻灯片对整个团队进行了两个小时的解释,一切都很顺利。
当然,他们有时会问我问题,但自迁移以来我们没有遇到任何真正的问题。只是对在工作目录中合并拉取更改的方式存在一些小误解。在几分钟内没有解决任何问题。
我想我可以说,在短短 2 周内,每个人至少都像以前一样高效,并且对新工具充满信心。现在我们可以使用特性分支而不必担心合并的到来:)
将 CVS 迁移到 mercurial
https://www.mercurial-scm.org/wiki/RepositoryConversion#CVS
官方 wiki 上列出了关于从 CVS 迁移到 Mercurial 的不同方法。我测试了Convert扩展和cvs2hg,终于用上了。
来自 CVS 的 Tailor 扩展程序 hg-cvs-import 似乎是旧代码,不再维护。
Convert 扩展在一个简单的存储库上工作得很好,但是由于我们的 CVS 存储库非常大并且有一些非常奇怪的分支,所以该扩展无法正确导入所有历史记录。 HEAD 是正确的,但缺少一些分支。
所以,最后一个选择是cvs2hg。事实上,它是 cvs2svn 的一个新后端,它转换为 Mercurial 而不是 Subersion。
自述文件中介绍的“快速入门”方法适用于所有分支。但最后我使用选项文件添加了一些用户映射并修剪了一些错误的提交或不需要的分支。
随文件提供的选项文件有很好的注释,你不难配置它以适合你。
有关信息,在初始转换后,我使用 Convert 扩展从生成的 Mercurial 存储库到另一个 Mercurial 存储库进行一些子项目提取,如 here 解释的那样。