任何编写自定义git合并策略的文档?

Dar*_*key 2 git merge

有一些二进制文件类型,我已经编写了自己的代码来干净地合并.我试图通过在.gitconfig中添加带有驱动程序的合并命令行并在.gitattributes中添加文件表达式来指向我的合并程序来添加自己的合并策略.

它的工作原理 - 如果我使用该文件类型进行git合并,它会调用我的程序 - 如果我以1退出则失败并说它存在冲突 - 如果为0则成功.

但是 - 我找不到任何关于它如何获取参数的文档 - 即我如何知道正在合并的文件 - 它正在合并的文件等等.它们不是作为环境变量进来的...我知道驱动程序命令行我可以放一些变量,但经过反复试验,$ PWD是我发现的唯一可行的.

有人能指出我有关如何编写自定义合并策略的任何文档吗?

tor*_*rek 5

这个答案分为两部分,因为您所描述的不是合并策略而是合并驱动程序.

合并策略

我认为没有适当的文件.只有源代码.但是,您可以获得有关策略如何使用的高级概述GIT_TRACE,因为git merge计算某些信息然后运行git-merge-recursive或者您选择的git-merge-octopus其他任何信息-s <strategy>.如果您编写自己的git-merge-oakey命令并运行git merge -s oakey,则可以查看参数.

合并驱动程序

您的合并驱动程序将以gitattributes文档中描述的方式调用(搜索定义自定义合并驱动程序).该%字符数限制置换将填写的各种参数.正如它所说,无论你在哪里写%O,%A或者%B,Git都会填写一个临时文件的名称,该文件保存来自相应索引阶段的数据(复制到工作树中的普通文件).您应该覆盖%A名称的文件.

我怎么知道合并的文件...

不知道(也无法分辨)合并的文件名 ; 您只需使用三个输入内容即可完成工作.最终,无论如何都不一定有一个文件名:Git可能在合并的一侧检测到重命名,因此文件foo在合并基础和一侧以及bar另一侧命名.(正如Hasturkun在评论中指出的那样,%P占位符将扩展到Git将用作最终路径名的最佳猜测.不要将此作为合并过程的三个输入之一,尽管 - 三个输入是在%O,%A%B文件.)