0

我有几个带有“完全相同”的 package.json 和几个配置文件的存储库。我在一个存储库中进行了更改,并希望将这些更改传播到其他存储库。我设法按照以下说明做了正确的事情:

  1. git format-patch HEAD^(来自有变化的仓库)
  2. git remote add patch repo/with/changes(来自需要更改的 repo)
  3. git fetch 补丁(来自需要更改的仓库)
  4. git am -3 path/to/patch/patch --ignore-whitespace --ignore-space-change (来自需要更改的仓库)
  5. 手动合并冲突(可视化工具)

问题出在最后一步——我也想自动化这一步。是否可以定义一些合并策略,例如“在与补丁连接的行上合并我们的,在所有其他冲突的行上合并他们的”?我在 package.json 文件上有相当简单的冲突,其中冲突的行来自补丁(我希望这些有),或者来自某些包的包名和版本(我希望它保持原样用于包)。

我知道,最好想办法避免重复并将类似文件移动到某个共享包中,但是我不知道如何为“package.json”之类的部分做到这一点,以及是否值得。对此问题的任何建议也非常感谢,但主要关注点仍然是补丁的“现状”问题。或者也许其他一些方法可以在不同回购的几乎一致的部分上传播变化。

我想自动合并的示例如下所示(例如,在 package.json 中,其他文件合并时没有冲突并从补丁中获取更改,但我猜在其他情况下,其他文件中也可能存在类似问题)

从第一个回购(补丁来源)

{
    "name": "packageA", 
    ... 
    script A: "..." // <- patch changed something here
    ...             // <- patch changed something here
    script C: "..." // <- patch changed something here
    ...
    dependencies: { 
        somePackage: "versionA"
    }
}

从第二个回购

{
    "name": "packageB", // <- here is conflict, I want to leave "package B"
    ... 
    script A: "..." // <- here is conflict, I want to get it from patch
    ...             // <- here is conflict, I want to get it from patch
    script C: "..." // <- here is conflict, I want to get it from patch
    ...
    dependencies: { 
        somePackage: "versionB" // <-- here is conflict, I want to leave "versionB"
    }
}
4

1 回答 1

0

我尝试cherry-pick --strategy-option theirs了而不是am -3它最终奏效了-合并没有任何冲突,保留了我想要的一切。我不知道,这些是合并策略功能还是我以某种方式未能做出正确的补丁(看起来很正常)。

于 2021-06-22T08:08:21.767 回答