如何使用Mercurial合并在存储库外部进行的更改?

时间:2010-07-27 15:01:25

标签: version-control mercurial merge

我加入了一个拥有绿地代码的团队。当我加入时,他们没有共同的存储库,他们通过电子邮件向我发送了他最新的tarball。 (是的,我知道......)我一直在处理这个tarball,进行更改和添加文件。现在团队有一个Mercurial存储库(万岁!),并且已经填充了包含其他人最近更改的相同代码。换句话说,我在目录中有原始的tarballed代码,在另一个目录中有我的更改,在第三个目录中有一个hg克隆,其中原始的tarballed代码是共同的祖先。

将我的更改合并到Mercurial存储库有什么好方法? Mercurial没有共同祖先的历史。我是Mercurial的新手。我的VCS经验是CVS,Perforce和一些SVN。我可以创建另外两个本地hg克隆并使用原始代码重写一个,另一个使用我更改的代码,并使用Mercurial以某种方式合并它们吗? (如果是,如何?)或者我应该考虑使用独立的合并工具,然后将合并的版本复制到我的克隆目录中?或其他什么?

这一切都在RHE Linux上。

谢谢。

1 个答案:

答案 0 :(得分:1)

尝试的一个选择是这样的:

diff -urN your-original-tarball your-current-code > mychanges.patch
hg clone their-current-repo your-local-clone
cd your-local-clone
hg update -r 0 # go to their oldest item in history
hg import --no-commit ../mychanges.patch
# check it out, test, fix any rejected changes, etc.
hg commit -m 'my changes'  # <-- you'll be warned this creates new heads
hg merge # merge your changes with their changes since they started using mercurial
hg commit -m 'merged my solo work with yours'

这将把你所有的工作都归咎于它,将它作为一个新的变更集导入,根据它们确实具有最早的版本,然后将这项工作与他们在mercurial中的工作合并,因为他们开始使用它。

理想情况下,他们的r0将是他们给你的tarball,但有一个希望是它没有太大的不同。