我尝试添加类似于此问题中的自定义合并策略:Git merge conflict to always take the newest file
我已将脚本保存为git-merge-latest.sh
,并将以下行添加到.git/config
:
[merge "latest"]
name = select latest file merge driver
driver = git-merge-latest.sh %O %A %B
然而,当我运行git pull --strategy latest
时,我收到消息:
Could not find merge strategy 'latest'.
Available strategies are: octopus ours recursive resolve subtree.
我已经尝试检查git config merge.latest.driver
,它会返回预期的输出。我还将driver
的值更改为true
只是为了验证找到脚本不是问题。
这发生在运行git 1.8.2.2和1.7.9.5的两个不同系统上。我做错了什么?
答案 0 :(得分:24)
在这种情况下,您没有配置合并策略,您配置了合并驱动程序:
合并策略是一个程序,用于确定如何合并两个(或更多)提交。默认情况下,git merge
使用程序git-merge-recursive
中的“递归”策略。通过将--strategy <strategy>
标志指定为git-merge
(或git-pull
),您可以告诉它调用其他策略。如果您想插入自己的合并策略,可以在路径中创建可执行文件git-merge-mystrategy
并运行git merge --strategy mystrategy
。
这与合并驱动程序不同。合并驱动程序是用于解决合并两个提交时存在的文件冲突的机制。您可以通过配置merge.mydriver.driver
设置以您概述的方式插入自己的合并驱动程序。
要为特定文件启用合并驱动程序,您需要在.gitattributes
中为该文件配置驱动程序:
filename merge=mydriver