合并到默认分支时合并驱动程序不起作用
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
现在,这仅在我将 prod
与 master
合并时有效(我在 master
,我在 运行 git merge prod
),但是它反过来不行(我在 prod
,我 运行 git merge master
,cfg.json is changed regardless of all my efforts
)
我相信我针对这个问题尝试了每一个 Whosebug 解决方案,尝试了很多文章,但它在这个非常具体的场景中不起作用。这是有意为之的行为吗?
从你的问题中不清楚这是否是正在发生的事情,但我认为你 运行 对 Git 合并的工作方式感到奇怪。在合并中,Git 只考虑三点:两个头和合并基础,通常是最近的共同祖先。
当 Git 进行合并时,如果文件一侧发生更改而另一侧未更改,Git 会采用更改后的版本,而根本不会调用任何合并功能,包括自定义合并驱动程序.这是因为,当你使用三向合并时,如果一侧发生变化而另一侧没有变化,则采用变化后的版本。
在你的情况下,你试图做的是一个坏主意,Git 开发人员建议人们不要这样做。如果你想要一个配置文件的两个不同版本,要么使用一个模板文件并从中生成一个被忽略的配置文件,要么将两个版本都包含到存储库中,然后通过外部的方式选择在每个环境中使用哪个版本存储库。当您进行合并时,像这样尝试保留两个版本的文件并不会真正发挥作用。
我有一个名为 prod
的默认分支,master
是我的开发分支。我已经通过 git config merge.ours.driver true
配置了一个合并驱动程序 ours
。这就是添加到我的配置中的内容:
配置:
[merge "ours"]
driver = true
我希望 cfg.json
在合并时不受影响,所以我还配置、提交,甚至将 .gitattributes
推送到两个分支:
.git 属性:
cfg.json merge=ours
现在,这仅在我将 prod
与 master
合并时有效(我在 master
,我在 运行 git merge prod
),但是它反过来不行(我在 prod
,我 运行 git merge master
,cfg.json is changed regardless of all my efforts
)
我相信我针对这个问题尝试了每一个 Whosebug 解决方案,尝试了很多文章,但它在这个非常具体的场景中不起作用。这是有意为之的行为吗?
从你的问题中不清楚这是否是正在发生的事情,但我认为你 运行 对 Git 合并的工作方式感到奇怪。在合并中,Git 只考虑三点:两个头和合并基础,通常是最近的共同祖先。
当 Git 进行合并时,如果文件一侧发生更改而另一侧未更改,Git 会采用更改后的版本,而根本不会调用任何合并功能,包括自定义合并驱动程序.这是因为,当你使用三向合并时,如果一侧发生变化而另一侧没有变化,则采用变化后的版本。
在你的情况下,你试图做的是一个坏主意,Git 开发人员建议人们不要这样做。如果你想要一个配置文件的两个不同版本,要么使用一个模板文件并从中生成一个被忽略的配置文件,要么将两个版本都包含到存储库中,然后通过外部的方式选择在每个环境中使用哪个版本存储库。当您进行合并时,像这样尝试保留两个版本的文件并不会真正发挥作用。