您只需将变更集拉入一个大存储库即可。从 A 回购开始:
$ hg init combined
$ cd combined
$ hg pull ../A
$ hg update
然后强行拉入 B 并虚拟合并两个头,以便保留 B 中的文件:
$ hg pull ../B --force
$ hg merge --tool internal:other
$ hg revert --all --rev tip
$ hg commit -m "Merge A and B, kept B"
然后对 C 重复:
$ hg pull ../C --force
$ hg merge --tool internal:other
$ hg revert --all --rev tip
$ hg commit -m "Merge B and C, kept C"
这为您提供了三行历史记录和一个合并点,您首先丢弃 A,然后是 B,最后是 C。
或者,您可以使用带有拼接图的转换扩展将三个历史拼接在一起。首先将所有变更集强制拉入单个存储库。然后进行 Mercurial 到 Mercurial 的转换,在其中将 A 的尖端添加为 B 的根的第一个父项。对于 B 和 C 也是如此。这给了你一个很长的历史,当你从 A 转到时会有一个非常突然的变化B 和从 B 到 C。
我会选择第一个选项:它是最明确的,并且最好地展示了在不伪造(转换)历史的情况下会发生什么。