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

mar*_*r10 4 merge mercurial

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

prj/
  public/
  develop/
Run Code Online (Sandbox Code Playgroud)

'develop'有很多提交,因为这是我工作的地方.甚至可能是多个脑袋我不时会发布开发资料库的快照.

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

>hg pull -f ../develop
>hg merge
>hg commit -m "alpha2"
Run Code Online (Sandbox Code Playgroud)

但这也将完整的变革集历史从"发展"转变为"公共"(这不是我想要的).

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

>hg commit -m "alpha2"
Run Code Online (Sandbox Code Playgroud)

但后来我必须'添加'新文件,'删除'过时文件并'重命名'再次移动文件.

使用-A带有提交的选项会盲目地添加/删除所有文件,即使它们在"开发"存储库中不受控制.

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

Ry4*_*ase 5

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

  1. 使用ConcatenatingChangesets将所有变更集从开发加入到公共单个结果变更集中- 或者
  2. 公开删除所有文件,在开发中制作'hg档案',并在公共场合展开 - 这将只为您提供受控文件- 或
  3. 在开发中使用'hg manifest'来驱动xargs只移动你想要的文件- 或者 -
  4. 在开发中执行'hg diff -r last-changeset-in-public -r tip',然后在公共场合使用'hg import'应用生成的差异,您将在公共场合中将完整更改作为单个变更集进行

任何一个都应该做同样的事情,但所有这些都有点难看,因为一般来说,扔掉历史是很难的.