强制 git 自定义合并驱动程序以合并 pom.xml (maven) 文件

Posted

技术标签:

【中文标题】强制 git 自定义合并驱动程序以合并 pom.xml (maven) 文件【英文标题】:Force git custom merge driver for the purpose of merging pom.xml (maven) files 【发布时间】:2016-01-29 11:07:03 【问题描述】:

我为 pom.xml (Maven) 文件配置了自定义 git 合并驱动程序。

配置:

.gitattributes 文件:

pom.xml merge=pommerge

还有 .gitconfig 文件:

[merge "pommerge"]
    name = A custom merge driver for Maven's pom.xml
    driver = mergepom.py %O %A %B

这对于解决此类文件中的冲突非常有用。不幸的是,这并不能解决 pom.xml 文件的所有问题或问题。只有当且仅当 pom.xml 在主分支(因此,我们称之为 'git merge otherbranch' 的分支)和我们要合并的分支('otherbranch')。

我们希望始终将我们的合并驱动程序用于 pom 文件,即使 pom 文件仅在 1 个分支中更改并且可以合并而不会发生冲突。

有没有办法在这种情况下强制我们的自定义“pommerge”驱动程序?

更新 我几乎尝试过任何东西,但没有运气。我什至检查了 git 源代码并在代码中添加了更多日志记录并安装/制作它以检查我是否可以找出我可以以某种方式使用的特定扩展点。 但是代码很难理解在哪些情况下会遵循代码中的哪个路径,因此这种努力比解决方案产生了更多的挫败感;)..

我可以让它工作的唯一方法,这不是一个解决方案,是在合并之前更改两端(分支)的文件。但这不是非常用户友好

我仍然希望有人提出一个天才的解决方案或线索,帮助我在这个挑战中走得更远。

感谢大家的宝贵时间!

【问题讨论】:

你能用一个 git 钩子做点什么吗?也许是一个预提交钩子,如果文件被修改,它会在文件上运行 mergepom.py? @WilliamHilton 合并时是否调用了预提交挂钩?因为文件可能会被更改和提交:只有在合并文件时才应该部分还原(特定的分支设置)。 好吧,我很难过。我尝试使用 .gitattributes 将 pom.xml 标记为二进制文件,但是当文件仅在一个分支上更改时,合并分支时仍然无法强制 git 创建“冲突”。 @WilliamHilton 感谢您的尝试!这也是我不幸遇到的.. 【参考方案1】:

您想要的是自定义合并策略,并且您已经定义了合并驱动程序

仅在发生冲突时调用驱动程序,而在合并两个提交时使用策略。

请参阅此答案以了解如何设置您的解决方案:

https://***.com/a/23140455/6084013

【讨论】:

以上是关于强制 git 自定义合并驱动程序以合并 pom.xml (maven) 文件的主要内容,如果未能解决你的问题,请参考以下文章

数据模型文件的自定义 Git 合并

Git - 如何在所选文件上强制合并冲突和手动合并

git 分支合并 强制合并

合并工具应如何指示合并成功?

Git合并与强制覆盖

强制 Git 在合并期间始终选择较新的版本?