Git自定义合并驱动程序,后备内置驱动程序

时间:2017-11-28 17:05:27

标签: git git-merge git-merge-conflict

我有一种具有特定布局的文本文件的自定义合并驱动程序。 (它解决了与git-merge-changelog基本相同的问题:当在同一个地方添加内容时,我有规则来决定放入它们的顺序。)

此合并驱动程序基于启发式方法,有时在更改过于复杂时失败。当它失败时,我想回到git的文本文件默认处理。

我已设置.gitattributes

myfile merge=my-driver

.gitconfig

[merge "my-driver"]
    name = My merge driver for myfile
    driver = my-merge-driver %O %A %B

当我的自定义合并驱动程序能够解决冲突时,这很好。当驱动程序无法解决冲突时,它会返回非零代码并且不会修改%A。这会导致git报告冲突(好),但保留文件的当前版本。相反,我希望git运行内置的文本合并驱动程序。

如何使用自定义合并驱动程序,但如果失败,请使用内置驱动程序作为后备?

1 个答案:

答案 0 :(得分:1)

部分解决方案(至少对于“正常”,双向合并):

driver = my-merge-driver %O %A %B || git-merge-file -q --marker-size=%L %A %O %B

这适用于执行文本合并并生成冲突标记。不幸的是,冲突标记具有临时文件名(<<<<<<< .merge_file_xxxxxx)而不是分支名称。我更喜欢拥有分支机构名称。

这可以通过与How to retrieve branch names in a custom Git merge driver?相同的方式解决(目前尚未回复)。