Git配置文件合并的顺序是什么?

3
我们的代码库包含多个源代码文件和一个构建产物文件(例如编译后的apiary蓝图)。
有一个构建脚本可以配置为合并驱动程序,但如果尚未合并源代码(或者至少从合并状态构建),则会失败。有没有办法告诉git应该按照什么顺序尝试合并文件?对于`git-diff`,有一个-O选项,但似乎不适用于`git-merge`。

问题在于apiary要求文件名为apiary.apib,因此我无法通过重命名文件来解决它。我可以创建一个类似于zzzz的文件,并在每次构建工件时填充它以触发合并并为该文件配置合并(以构建apiary蓝图),将原始的apiary.apib文件配置为-merge。这样做是可行的,但我不喜欢在存储库中拥有这样一个hacky文件的想法。 - Mikulas Dite
1
git-diff有一个-O<orderfile>,但似乎没有应用于git-merge。从Git 2.11+(Q4 2016)开始将会实现!请参阅下面我编辑和修订过的答案 - VonC
1个回答

2
2016年10月更新,适用于Git 2.11+(2016年第四季度)

git-diff有一个-O<orderfile>选项,但似乎并未应用到git-merge

现在有了,但只适用于git mergetool
请参见提交 654311b(2016年10月8日),以及提交57937f7提交08221e3提交8827b3a(2016年10月7日),作者为David Aguilar(davvid。 协助者为Johannes Sixt(j6t(由Junio C Hamano -- gitster --于2016年10月17日合并到提交5b4c45a “mergetool”:支持“-O”
教会“mergetool”在命令行上指定时将“-O”传递给“git diff”。现在 git mergetool man page已经更新。
-O<orderfile>:

按照 <orderfile> 中指定的顺序处理文件,每行一个 shell glob 模式。
这将覆盖 diff.orderFile 配置变量。
要取消 diff.orderFile,请使用 -O/dev/null
注意:orderfile 格式仅在 Git 2.12 中有文档记录。
查看 提交 874444b提交 1a5fccc(2017年1月15日),作者为 Richard Hansen(rhansen
(由Junio C Hamano -- gitster --提交 831bd5e中合并,日期为2017年1月23日)

原始答案为2015年8月

看起来问题是由于合并驱动程序脚本的修改引起的,此外还有对其他文件的修改。

当您合并您的分支时,合并驱动程序脚本尚未合并。

为什么不在一个单独的专用分支中更新您的合并驱动程序脚本,然后先合并该分支。
然后再合并您的dev分支。

另一种方法也可以使用包装器,如 OP Mikulas Dite 评论 所述:

事实证明,创建自定义合并包装器非常简单,将构建文件作为 -merge 的构建成果留下。
包装器运行git merge,如果除了构件之外没有其他未解决的文件,则运行构建脚本。


谢谢,但我不太确定我理解了。问题绝对不是合并驱动程序的问题,因为它甚至不在存储库中,现在更多的是概念证明。属性也不是,它们目前仅为本地属性,并存储在.git/info/attributes中。 - Mikulas Dite
@MikulasDite 好的,但是这个想法仍然存在:在合并顺序方面,将您想要首先合并的内容隔离到自己的分支中,首先合并该分支,然后从通常的分支合并其余部分。 - VonC
没错,但这样就失去了它的意义,我想简化这个过程。我的意思是,在所有依赖项手动合并后,我可以运行构建脚本。当然,这只是小事,但我很想摆脱它。 - Mikulas Dite
@MikulasDite同意,但如果你的合并脚本以正确的顺序进行这两个合并,你就不会再有任何问题了。由于合并过程中没有排序,这将是我推荐的解决方法。 - VonC
哦,花了我一段时间,但我明白了。原来只需要创建一个自定义合并包装器,将构建工件保留为“-merge”就可以了。包装器运行git merge,如果除工件以外没有其他未解决的文件,则运行构建脚本。现在,如果我能让它与git-rebase一起工作就好了。 您能否更新答案以反映这个讨论,这样我就可以接受它了吗? - Mikulas Dite
@MikulasDite 我已经编辑了答案,以便更容易看到您的评论。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接