我需要将两个mercurial存储库合并到一个全新的第三个存储库中。
项目A:
1--2--3
项目A':
4--5--6
我想要的是什么:
项目B:
1--2--3--4--5--6
由于我的服务器上的大小限制,已从项目A中删除了历史记录。 我没有尺寸限制了。 我想带回来
类似于this question,除了我需要一个mercurial
的解决方案答案 0 :(得分:2)
你当然可以这样做并保留历史记录,但你的变化集合哈希几乎肯定会从原文中改变 此外,在我继续之前,备份,备份,备份。确保你保留原件以防万一这一切都非常糟糕,这很可能。
在我的头顶,你有两个选择
两者都是从使用--force
选项将项目A'拉入项目A开始,以允许您引入不相关的存储库。例如。
hg pull --force ProjectA'
让我们称之为新的组合回购项目A +。
<强>衍合强>
然后您可以使用Rebase扩展(需要在Mercurial扩展设置中启用)来更改变更集4,并将其后代更改为变更集3.例如:
hg rebase --source 4 --dest 3
您可能还想使用--keepbranches
选项,或者可能会将所有分支名称重置为修订版本3的名称。
我自己从未使用过这种特殊的策略,但我不明白为什么它不起作用。
<强>转换强>
我之前使用的第二个选项是带有splicemap的hg convert
splicemap选项允许您为变更集指定新父项,因此您可以指定rev 3是rev 4的父项,而现在rev 4可能没有父项。
splicemap基本上是一个文本文件,内容的格式如下:
revision-hash new-parent-hash
文件中的每个地图都用新行分隔 您必须使用完整哈希,友好修订号或短哈希将不起作用。
然后要实际使用splicemap,请执行以下操作:
hg convert --splicemap splicemap_filepath.txt ProjectA+ ProjectB
这将会产生具有统一历史的Project B回购。
根据您的回购的大小,这些都不会很快。