Git Hook 访问合并冲突

问题描述 投票:0回答:2

我知道我不是第一个遇到这个问题的人,但我找不到我正在寻找的答案。我熟悉 Git,但对 Git hooks 不太熟悉。

问题:

我有一个 Git 存储库,它由几个使用 Maven 构建工件的 Java 模块组成。在“master/main”分支中,版本号始终为“Major.Minor.Patch.Build-SNAPSHOT”,直到发布版本后,“-SNAPSHOT”将被删除并创建工件。然后,正确的版本号将增加到下一个版本,并添加回“-SNAPSHOT”。每天晚上都会有一个夜间构建,该构建将增加构建版本号;并且基于语义版本控制,“Major.Minor.Patch”版本将根据 Pull 请求合并进行更新。因此,POM 版本每天都会以不同的方式发生变化。

当开发人员创建“master/main”分支时,我们想要编写一个 Git 挂钩来将 POM 版本更改为“Major.Minor.Patch.Build-DEV-QUALIFIER-SNAPSHOT”。我已经弄清楚在哪里可以使用 `post-checkout` Git 钩子来做到这一点。并编写了一个通用的版本验证shell脚本来使用。

当开发人员将“master/main”中的最新内容合并到他们的分支中时,这将产生冲突。我可以使用 `pre-merge-commit` 钩子来执行 `git checkout --theirs [PATH TO POM FILE]`;然后调用版本验证脚本来更改POM版本。我相信有一个钩子可以为变基做同样的事情。可能还有一个同时用于变基和合并。 ‘重写后’?

这就是问题开始发挥作用的地方...... 当开发人员更改 POM 文件(例如添加新的依赖项)时会发生什么?每次他们进行合并/变基时;他们会丢失更改并必须重新添加这些更改。

问题:

由于与 POM 文件总是存在合并冲突,是否有一种简单的方法可以自动处理来自“master/main”的冲突?使用新的 POM 版本,但同时保留开发人员所做的更改?


或者,是读取 POM 文件的最佳方法,该文件会产生如下所示的冲突:

<<<<<<<< HEAD
<version>1.2.3.4-Dev-Qualifier-SNAPSHOT</version>
=======
<version>1.2.3.5-SNAPSHOT</version>
>>>>>>> master/main

并删除:

<<<<<<<< HEAD
<version>1.2.3.4-Dev-Qualifier-SNAPSHOT</version>
=======
>>>>>>> master/main

离开

<version>1.2.3.5-SNAPSHOT</version>

就位?


或者我们是否告诉开发人员解决任何冲突,然后使用“pre-commit”挂钩来验证 POM 版本。


有没有库可以完成所有这些工作?正如我之前提到的,我知道我不是第一个面临这个问题的人。

java git maven hook
2个回答
0
投票

在了解了有关 Git Hooks 的更多信息之后。如果合并或变基发生冲突,则不会调用 Git Hooks。这意味着无法自动解决合并或变基带来的冲突。冲突必须始终手动完成。

有一种方法可以通过使用预提交或预推送挂钩来验证 POM 文件中的版本是否正确。尽管使用预提交将在每个

git commit
上执行。如果需要版本验证,
pre-push
可能是可行的方法。


0
投票

您可以尝试通过自定义合并驱动程序来完成此操作。每次出现合并冲突时,都会调用您的自定义合并驱动程序。因此,您唯一要做的就是实现这样一个用于组合 POM 的驱动程序。

© www.soinside.com 2019 - 2024. All rights reserved.