合并到默认分支时合并驱动程序不起作用

Merge drivers don't work when merging into default branch

我有一个名为 prod 的默认分支,master 是我的开发分支。我已经通过 git config merge.ours.driver true 配置了一个合并驱动程序 ours。这就是添加到我的配置中的内容:

配置:

[merge "ours"]
    driver = true

我希望 cfg.json 在合并时不受影响,所以我还配置、提交,甚至将 .gitattributes 推送到两个分支:

.git 属性:

cfg.json merge=ours

现在,这仅在我将 prodmaster 合并时有效(我在 master,我在 运行 git merge prod),但是它反过来不行(我在 prod,我 运行 git merge mastercfg.json is changed regardless of all my efforts

我相信我针对这个问题尝试了每一个 Whosebug 解决方案,尝试了很多文章,但它在这个非常具体的场景中不起作用。这是有意为之的行为吗?

从你的问题中不清楚这是否是正在发生的事情,但我认为你 运行 对 Git 合并的工作方式感到奇怪。在合并中,Git 只考虑三点:两个头和合并基础,通常是最近的共同祖先。

当 Git 进行合并时,如果文件一侧发生更改而另一侧未更改,Git 会采用更改后的版本,而根本不会调用任何合并功能,包括自定义合并驱动程序.这是因为,当你使用三向合并时,如果一侧发生变化而另一侧没有变化,则采用变化后的版本。

在你的情况下,你试图做的是一个坏主意,Git 开发人员建议人们不要这样做。如果你想要一个配置文件的两个不同版本,要么使用一个模板文件并从中生成一个被忽略的配置文件,要么将两个版本都包含到存储库中,然后通过外部的方式选择在每个环境中使用哪个版本存储库。当您进行合并时,像这样尝试保留两个版本的文件并不会真正发挥作用。