Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial:将另一个存储库作为新分支导入_Mercurial_Branching And Merging - Fatal编程技术网

Mercurial:将另一个存储库作为新分支导入

Mercurial:将另一个存储库作为新分支导入,mercurial,branching-and-merging,Mercurial,Branching And Merging,场景:我有两个Mercurial存储库,我们称它们为“原始”和“新产品” 原版有1072次历史修订。新产品的创建如下所示: 将原件更新为tip(r1072) 将工作目录复制到新文件夹 在该文件夹中创建存储库NewProduct 添加所有文件并对新产品执行初始提交 本质上,原创的现状是用来创造一个没有原创历史的新产品 由于这两种产品的方向发生了意想不到的变化,它们将比最初想象的更加相似。许多即将进行的更改将与这两种产品兼容。因此,能够在它们之间移植变更集是非常有用的 问题:我希望将NewProdu

场景:我有两个Mercurial存储库,我们称它们为“原始”和“新产品”

原版有1072次历史修订。新产品的创建如下所示:

  • 将原件更新为tip(r1072)
  • 将工作目录复制到新文件夹
  • 在该文件夹中创建存储库NewProduct
  • 添加所有文件并对新产品执行初始提交
  • 本质上,原创的现状是用来创造一个没有原创历史的新产品

    由于这两种产品的方向发生了意想不到的变化,它们将比最初想象的更加相似。许多即将进行的更改将与这两种产品兼容。因此,能够在它们之间移植变更集是非常有用的

    问题:我希望将NewProduct作为原始存储库中的命名分支。这可能吗?我该怎么做

    尝试解决方案

    上有一些类似的问题,例如。我的场景中的关键区别在于,另一个存储库不是第一个存储库的克隆—它是基于第一个存储库的工作目录创建的。因此,这些解决方案似乎并不适用

    我解决这个问题的第一次尝试是使用补丁

    我认为,如果NewProduct/r0中的文件与Original/r1072中的文件相同,那么从NewProduct/r1开始的任何更改集理论上都可以应用于Original/r1072之上

    以下是我所做的:

  • 导出新产品的修订版1..提示为修补程序
  • 在原始文件中创建新的命名分支
  • 导入修补程序
  • 此过程在NewProduct中的第一个合并变更集处停止。我不知道补丁和变更集不是一回事——补丁只有一个父项,而合并变更集有两个父项


    注意:我主要在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选项