Mercurial:将另一个存储库作为新分支导入
场景:我有两个Mercurial存储库,我们称它们为“原始”和“新产品” 原版有1072次历史修订。新产品的创建如下所示:Mercurial:将另一个存储库作为新分支导入,mercurial,branching-and-merging,Mercurial,Branching And Merging,场景:我有两个Mercurial存储库,我们称它们为“原始”和“新产品” 原版有1072次历史修订。新产品的创建如下所示: 将原件更新为tip(r1072) 将工作目录复制到新文件夹 在该文件夹中创建存储库NewProduct 添加所有文件并对新产品执行初始提交 本质上,原创的现状是用来创造一个没有原创历史的新产品 由于这两种产品的方向发生了意想不到的变化,它们将比最初想象的更加相似。许多即将进行的更改将与这两种产品兼容。因此,能够在它们之间移植变更集是非常有用的 问题:我希望将NewProdu
注意:我主要在TortoiseHg中工作,因此如果可以使用GUI完成解决方案,那将是更好的选择,但是命令行也是可以接受的。啊哈!通过将ConvertExtension()与拼接图、branchmap和hg.startrev选项一起使用,我能够获得所需的结果。这个过程不是很直观,所以我就是这么做的 1) 创建一个名为SpiceMap.txt的文件,该文件包含两个完整的40位哈希: 拼接图.txt
first-revision-of-to-be-converted-history tip-of-existing-history
在我的场景中,要转换的历史的第一个修订版是NewProduct/r1,因为r0是作为工作目录复制的<代码>现有历史的提示是原始的/r1077(打开命名分支NewProduct的空白提交)
2) 使用以下行创建名为branchmap.txt的文件:
branchmap.txt
default new_product_branch
这将导致默认分支中的新产品变更集导入原始存储库的名为“新产品”分支的分支中
3) 执行以下命令:
hg --config hg.convert.hg.startrev=1 convert --splicemap splicemap.txt --branchmap branchmap.txt path/to/newproduct path/to/original
注意额外的选项--config convert.hg.startrev=1
。这是从导入中排除新产品/r0所必需的
当我第一次在没有该选项的情况下运行该命令时,NewProduct/r0被复制,成为一个没有父代或子代的悬空变更集。“拼接映射”选项并不阻止转换变更集,它只是定义了哪个导入的变更集连接到现有历史记录。要从导入中排除早期变更集,还需要hg.startrev选项