无法将.gitattributes配置为对合并有任何影响

问题描述

已配置merge的{​​{1}}驱动程序:

.gitattributes

以下是仓库的git config --global merge.ours.driver true $git config -l push.default=current pull.default=current merge.ours.driver=true 文件(在gitattributes下)中的内容

.git/info/attributes

$cat .git/info/attributes keys_manager/* merge=ours js/README.md merge=theirs 目录已在第一个分支(我们的)中删除,并在第二个分支(其分支)中对其进行了更改。已对远端keys_manager内的文件和两个分支上的keys_manager进行了更改。

现在让我们对提交进行一次试运行:

js/README.md

结果:

git merge --no-commit --no-ff origin/audiorec

这些不是预期的CONFLICT (modify/delete): keys_manager/init_db.sql deleted in HEAD and modified in origin/audio-recorder. Version origin/audio-recorder of keys_manager/init_db.sql left in tree. Auto-merging js/README.md CONFLICT (content): Merge conflict in js/README.md Automatic merge Failed; fix conflicts and then commit the result. 影响结果,而是像.gitattributes不存在一样的原始结果。为什么没有生效?

解决方法

如果发生低级别冲突,则您的合并驱动程序将用于keys_manager/init_db.sql。但实际上:

CONFLICT (modify/delete): keys_manager/init_db.sql deleted in HEAD
and modified in origin/audio-recorder ... [snip]

您遇到了高级冲突,而不是低级冲突。即,一侧完全删除了文件,而另一侧修改了文件。标准合并策略始终只是将修改后的文件保留为临时(冲突的)结果,并在发生冲突时停止。如果您要删除文件的最终结果,可以立即删除文件。

与此同时,

Auto-merging js/README.md
CONFLICT (content): Merge conflict in js/README.md

是一个低级冲突,因此您的合并驱动程序:

js/README.md merge=theirs

应该已经被调用。您显示了:

merge.ours.driver=true

但是merge.theirs.driver设置为什么?如果未设置,则忽略使用您自己的驱动程序的说明; Git使用其内置的低级合并驱动程序。