目前,我的公司正在使用cvs进行版本控制。我们有一个旧的代码分支,专门用于一个客户机(不要问),我们想要合并到头。
由于这个分支和头部之间的差异,我认为mercurial的合并功能应该会使我的工作更容易一些。我的推理是:
在这个阶段,我期望mercurial能提供比cvs更好的merge support。
然后,我会将对主干存储库的更改提交回cvs。
这个方法听起来不错吗?这个策略会不会像我想的那样导致一个不那么痛苦的合并,还是我缺少了什么?
发布于 2010-12-13 17:35:40
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命令错了,这是一个很长的时间)。
问题是知道POINT_OF_DIVERGENCE在CVS中的位置-- CVS根本不跟踪这一点,这就是为什么它自己的合并不使用它。
CVS的最佳实践总是建议,每当您分支时,您都会创建一个标记来标记分歧点,但是如果您没有这样做,那么前面就会有一些棘手的搜索。
如果没有一个正确的最近的共同祖先,汞的合并不会比CVS的更好。
发布于 2010-12-13 17:09:21
是的,这应该是可行的,但在此过程中可能会出现一些小问题(比如如何将源从CVS中获取到Mercurial:使用hg convert
或手动导入某个修订版,等等)。
如果遇到问题,请创建一个新的问题。
发布于 2011-06-09 20:18:52
除了非常简单的历史之外,内置的转换扩展在CVS中不会做得很好。使用cvs2svn的分叉名为cvs2hg
https://stackoverflow.com/questions/4431389
复制相似问题