gpt4 book ai didi

git - 编写自定义 git merge 策略的任何文档?

转载 作者:太空狗 更新时间:2023-10-29 14:31:04 26 4
gpt4 key购买 nike

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

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

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

谁能告诉我有关如何编写自定义 merge 策略的任何文档?

最佳答案

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

merge 策略

我认为没有任何适当的文档。只有源代码。您可以使用 GIT_TRACE 获得有关策略如何工作的良好高级概述。 ,虽然,因为 git merge计算一些信息然后运行 ​​git-merge-recursivegit-merge-octopus或其他任何-s <strategy>你已经选择了。如果你自己写 git-merge-oakey命令,然后运行 ​​git merge -s oakey ,您可以查看参数。

merge 驱动程序

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

how do I know what file is being merged ...

不知道(也无法分辨)正在 merge 哪个文件名;您应该只使用三个输入内容 来完成您的工作。最终,无论如何都不一定有一个文件名:Git 可能在 merge 的一侧检测到重命名,因此该文件被命名为 foo在 merge 基地和一侧,以及bar另一方面。 (作为 Hasturkun noted in a comment%P 占位符将扩展为 Git 将使用的任何名称作为最终路径名的最佳猜测。不要将其用作 merge 过程的三个输入之一,尽管如此 -三个输入在 %O%A%B 文件中。)

关于git - 编写自定义 git merge 策略的任何文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54528824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com