【问题标题】:git: How do I add a custom merge strategy?git:如何添加自定义合并策略?
【发布时间】:2014-06-02 03:27:12
【问题描述】:

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

【问题讨论】:

    标签: git merge


    【解决方案1】:

    在这种情况下,您没有配置合并策略,您配置了合并驱动程序

    合并策略是确定如何合并两个(或多个)提交的程序。默认情况下,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
    

    【讨论】:

    • 可能想要明确声明添加合并策略是修改git 代码的问题 - 这不是可以通过配置更改来完成的事情(至少目前)......
    • @twalberg - 实际上,您可以很容易地插入自己的插件;如果你的路径中有git-merge-xyz,那么如果你是git merge --strategy xyz,git 就会运行它。我会在我的回答中更清楚地说明这一点。
    • 关于如何编写 git 合并策略可执行文件的规范是否记录在任何地方?我应该对标准输入有什么期望,输出应该是什么?
    • 有什么方法可以为某些文件设置默认策略?
    猜你喜欢
    • 2018-09-08
    • 2022-08-02
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多