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

时间:2019-02-05 06:29:36

标签: git merge

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

它有效-如果我对该文件类型执行git merge,它将调用我的程序-如果我以1退出则失败,并说存在冲突-如果0则成功。

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

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

1 个答案:

答案 0 :(得分:5)

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

合并策略

我认为没有任何适当的文档。只有源代码。不过,由于GIT_TRACE计算了一些信息然后运行git mergegit-merge-recursive或其他任何{{ 1}}您已选择。如果您编写自己的git-merge-octopus命令并运行-s <strategy>,则可以查看参数。

合并驱动程序

您的合并驱动程序以the gitattributes documentation中所述的方式调用(搜索定义自定义合并驱动程序)。 git-merge-oakey字符替换将填充各种参数。就像说的那样,无论您在何处写入git merge -s oakey%%O,Git都将填写一个临时文件的名称,该文件保存来自适当索引阶段的数据(复制到工作树中的普通文件)。您应该覆盖%A命名的文件。

  

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

不知道(也无法确定)正在合并哪个文件名;您只需要使用三个输入内容 即可完成您的工作。最终,无论如何不一定要有一个文件名:Git可能在合并的一侧检测到重命名,因此该文件在合并基础和一侧分别命名为%B,而{{1 }} 另一方面。 (作为Hasturkun noted in a comment%A占位符将扩展到Git将用作最终路径名的最佳猜测的任何名称。请勿将其用作合并过程的三个输入之一,但是-这三个输入位于foobar%P文件中。)