2015-04-29 62 views

回答

2

的解决方案你当然可以做到这一点,保存历​​史,但你的变更哈希几乎肯定会从原件改变。
另外,在我继续之前,备份,备份,备份。确保你保留原件,以防万一这一切出现可怕的错误,这很可能。

关闭我的头顶上有两个选项。
两者都是从您使用--force选项将项目A'拉入项目A开始,以允许您拉入不相关的存储库。例如。

hg pull --force ProjectA' 

让我们称之为新的联合回购项目A +。

再次基于

那么你可以使用底垫的扩展(这需要在您的水银扩展设置中启用)衍合变更4和它的后代在变更3.例如:

hg rebase --source 4 --dest 3 

您可能还想使用--keepbranches选项,或者它可能会将所有分支名称重置为修订版本3.
我从未使用过这种特殊策略,但我不明白为什么它不起作用。

转换

第二个选项,这是我以前所使用的,是hg convert与splicemap。
splicemap选项允许你为变更集指定新的父母,所以你可以指定rev3是rev4的父母,而现在rev4可能没有父母。

的splicemap基本上是一个文本文件,并且将内容的格式为:

revision-hash new-parent-hash 

和文件中的每个映射由一个新行分开。
你必须使用完整散列,友好版本号或短散列将不起作用。

然后实际使用您做以下的splicemap:

hg convert --splicemap splicemap_filepath.txt ProjectA+ ProjectB 

这会吐出一个项目B回购有统一的历史。

根据您的回购协议的规模,这些都不会很快。

+0

谢谢@Nanhydrin我会试试这个 –

+0

我认为splicemap是一个很好的方式去这里(从最近的经验)。不过,我认为splicemap文件格式是“父亲”,而不是相反。 – DaveInCaz

+0

@DaveInCaz感谢您指出。我已经交换了他们,我不认为孩子哈希值作为一个名字特别清晰,所以我也重命名了它。 – Nanhydrin

相关问题