【问题标题】:Mercurial: Import another repository as new branchMercurial:导入另一个存储库作为新分支
【发布时间】:2018-02-21 11:48:25
【问题描述】:

场景:我有两个 Mercurial 存储库,我们称它们为“Original”和“NewProduct”。

原始历史有 1072 次修订。 NewProduct 创建如下:

  1. 将原始更新为小费 (r1072)
  2. 将工作目录复制到新文件夹
  3. 在该文件夹中创建存储库 NewProduct
  4. 添加所有文件并对 NewProduct 执行初始提交

本质上,Original 的当前状态是用来创造一个没有 Original 历史的新产品。

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

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

解决方案的尝试

有一些关于 SO 的问题看起来很相似,例如Mercurial merge repository as branch。我的场景的主要区别在于,另一个存储库不是第一个存储库的克隆——它是基于第一个存储库的工作目录创建的。因此,这些解决方案似乎并不适用。

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

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

这就是我所做的:

  1. 将 NewProduct 的修订 1..tip 导出为补丁
  2. 在 Original 中创建新的命名分支
  3. 导入补丁

此过程在 NewProduct 中的第一个合并变更集处停止。我不明白补丁与变更集不是一回事——补丁只有一个父级,而合并变更集有两个。

注意:我主要在 TortoiseHg 工作,所以如果可以使用 GUI 完成解决方案,那将是可取的,但命令行也是可以接受的。

【问题讨论】:

    标签: mercurial branching-and-merging


    【解决方案1】:

    啊哈!通过将 ConvertExtension (https://www.mercurial-scm.org/wiki/ConvertExtension) 与 splicemap、branchmap 和 hg.startrev 选项一起使用,我能够获得所需的结果。这个过程不是很直观,所以这就是我所做的。

    1) 创建一个名为 splicemap.txt 的文件,其中包含两个完整的 40 位哈希:

    拼接图.txt

    first-revision-of-to-be-converted-history tip-of-existing-history
    

    在我的场景中,first-revision-of-to-be-converted-history 是 NewProduct/r1,因为 r0 被复制为工作目录。 tip-of-existing-history 是 Original/r1077(打开命名分支 NewProduct 的空白提交)。

    2) 使用以下行创建一个名为 branchmap.txt 的文件:

    branchmap.txt

    default new_product_branch
    

    这会导致默认分支中 NewProduct 的变更集被导入到名为 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。这是从导入中排除 NewProduct/r0 所必需的。

    当我第一次运行没有该选项的命令时,NewProduct/r0 被复制并成为一个没有父或子的悬空变更集。 splicemap 选项不会阻止变更集被转换,它只是定义哪个导入的变更集连接到现有历史记录。要排除导入早期的变更集,还需要 hg.startrev 选项。

    【讨论】:

      猜你喜欢
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多