使用mercurial合并cvs分支

时间:2010-12-13 17:05:11

标签: mercurial cvs

目前我的公司正在使用cvs进行版本控制。我们有一个旧的代码分支,专门用于一个客户端(不要问)我们想要合并到头部。

由于这个分支和头部之间的差异,我认为mercurial的合并功能应该让我的工作更容易一些。我的推理理由是:

  1. 创建分支和当前头部的mercurial存储库。
  2. 将分支回购合并到主干仓库。
  3. 在这个阶段,我期待mercurial提供比cvs更好的merge support

    然后我将对trunk库的更改提交回cvs。

    这种方法听起来有效吗?这种策略会不会像我想的那样导致不那么痛苦的合并,或者是否有我遗漏的东西?

3 个答案:

答案 0 :(得分:1)

Mercurial合并比CVS或Subversion更好的原因是因为它跟踪了两个头/分支的最新共同祖先,所以你要确保你准确地提供这些信息,否则你可能最终会更糟糕的合并。

如果您这样做:

hg init newrepo
cd newrepo
cvs checkout POINT_OF_DIVERGENCE
hg commit --addremove -m 'commiting point of divergence'
cvs checkout BRANCH
hg addremove --similarity 90 # let Mercurial discover any renames
hg commit -m 'committing branch head'
hg update -r 0               # jump back to point of divergence
cvs checkout HEAD
hg addremove --similarity 90 # let Mercurial discover any renames
hg commit -m 'commiting HEAD head'
hg merge

然后两个头的共同祖先将是分歧的点(对不起,如果CVS命令错误,这是一段漫长的时间)。

麻烦在于知道POS_OF_DIVERGENCE在CVS仓库中的位置--CVS根本不跟踪它,这就是它自己的合并不使用它的原因。

CVS最佳实践总是建议您在分支时创建一个标记分歧点的标记,但如果您没有这样做,那么就会有一些棘手的搜索。

如果没有正确的最近共同祖先,Mercurial合并将不会比CVS更好。

答案 1 :(得分:0)

是的,这应该有效,但在此过程中可能会遇到一些小问题(比如如何将源代码从CVS转换为Mercurial:使用hg convert或手动导入某个版本等)。< / p>

如果您遇到问题,请创建一个新问题。

答案 2 :(得分:0)

除了非常简单的历史记录之外,内置的转换扩展程序不能很好地处理CVS。使用名为cvs2hg

的cvs2svn的fork

http://hg.gerg.ca/cvs2svn