git:如何添加自定义合并策略?

时间:2014-04-17 18:00:46

标签: git merge

我尝试添加类似于此问题中的自定义合并策略: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的两个不同系统上。我做错了什么?

1 个答案:

答案 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