使用Mercurial从不相关的存储库合并提示

时间:2009-09-02 14:36:21

标签: mercurial merge

我有两个不相关的存储库'public'和'develop':

prj/
  public/
  develop/

'develop'有很多提交,因为这是我工作的地方。也许甚至多头 我有时会发布开发存储库的快照。

从公共文件夹我可以这样做:

>hg pull -f ../develop
>hg merge
>hg commit -m "alpha2"

但这也将完整的变更集历史从“发展”转变为“公共”(这不是我想要的)。

除了'.hg'子文件夹外,我还可以删除'public'中的所有文件。 然后手动复制'develop'目录中的所有文件并执行

>hg commit -m "alpha2"

然后我必须'添加'新文件,'删除'过时文件并'重命名'移动文件。

-A选项与commit一起使用会盲目添加/删除所有文件,即使它们在'development'存储库中不受控制。

必须有一种更有效的方法来做到这一点; - )

1 个答案:

答案 0 :(得分:5)

我建议你移动完整的历史,但如果你因为某种原因无法忍受,那么你可以做任何这些事情:

  1. 使用ConcatenatingChangesets将所有变更集从开发加入到公共 - 或 -
  2. 中的单个结果变更集中
  3. 公开删除所有文件,在开发中制作'hg档案',并在公开场合展开 - 这将只为您提供受控文件 -or
  4. 在开发中使用'hg manifest'来驱动xargs只移动你想要的文件 -or -
  5. 在开发中执行'hg diff -r last-changeset-in-public -r tip',然后在公共场合使用'hg import'应用生成的diff,并且您将完整更改作为单个更改集公共
  6. 其中任何一个都应该做同样的事情,但所有这些都有点难看,因为一般来说,丢掉历史是很难的。