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

标签 git merge

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

最佳答案

在这种情况下,您没有配置 merge 策略,而是配置了 merge 驱动程序:

merge 策略是确定如何 merge 两个(或更多)提交 的程序。默认情况下,git merge使用程序中的“递归”策略 git-merge-recursive .通过指定 --strategy <strategy>标记为 git-merge (或 git-pull )你告诉它调用不同的策略。如果你想插入你自己的 merge 策略,你可以通过创建一个可执行文件 git-merge-mystrategy在你的路径中运行 git merge --strategy mystrategy .

这不同于 merge 驱动程序。 merge 驱动程序是用于解决 merge 两个提交时存在的文件冲突的机制。您按照概述的方式插入自己的 merge 驱动程序,方法是配置 merge.mydriver.driver设置。

要为特定文件启用 merge 驱动程序,您需要在 .gitattributes 中为该文件配置驱动程序:

filename merge=mydriver

关于git:如何添加自定义 merge 策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23140240/

相关文章:

git - 如何重写历史记录以便删除文件夹中所做的所有更改?

git - 错误 :1400410B:SSL routines:CONNECT_CR_SRVR_HELLO:wrong version number

r - 使用 R 中的行名称合并列表的向量

r - 将列表列表的维度组合成单独的向量

java - 我不知道如何通过递归合并来阻止 Stackoverflow 错误

git - 如何在不修改 .git/index 的情况下运行 git status - 例如在 PROMPT_COMMAND 中

git - git 上的每个目录权限

git - Atom 从搜索中排除 node_modules 文件夹

git - Beyond Compare - 自动 merge 工作副本中的 "conflicted"文件(如果可能)

c++ - C++ 中涉及 new 和 delete[] 函数的奇怪错误