目前我的公司正在使用cvs进行版本控制。我们有一个旧的代码分支,专门用于一个客户端(不要问)我们想要合并到头部。
由于这个分支和头部之间的差异,我认为mercurial的合并功能应该让我的工作更容易一些。我的推理理由是:
在这个阶段,我期待mercurial提供比cvs更好的merge support。
然后我将对trunk库的更改提交回cvs。
这种方法听起来有效吗?这种策略会不会像我想的那样导致不那么痛苦的合并,或者是否有我遗漏的东西?
答案 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