21

pom.xml将master合并到分支时,有没有办法避免版本标签中的合并冲突?我有很多 pom 文件,80 个,它们都有相同的版本,与 master 中的不同。git mergetool仅仅为了一个版本标签就执行 80 个 pom 文件既费力又费时。

4

7 回答 7

10

我总是做的是使用maven 版本插件更改模块的版本,然后从另一个分支(使用不同的版本)合并:

mvn versions:set -DnewVersion=1.1 -DgenerateBackupPoms=false

这会将所有当前模块(父模块和子模块)的版本更改为您指定为 newVersion 参数的版本。更改版本后,进行新的提交(git commit ...),然后进行合并。我已经使用 Jenkins 任务将所有这些自动化,但以其他方式(例如 sh 脚本)实现它应该不难。

于 2015-10-17T00:02:09.693 回答
8

你可能有几个选择。没有一个是完美的:-/

1) 你可以使用'git merge -s ours',但你应该只在你知道你不需要其余的更改时才这样做。

2) 你也可以使用 git rerere,它通过记住你上次所做的来帮助解决冲突。您可以通过设置 rerere.enabled 来全局启用它,使其始终“正常工作”。或者您也可以阅读手册页并手动完成。

于 2012-08-30T13:19:18.353 回答
2

您还可以使用自定义合并驱动程序,如pom-merge-driver。根据您的工作流程,您可能希望将 pom 合并为普通文件,但以不同方式处理项目版本:始终采用合并分支版本,或在合并到开发分支时异常...

于 2014-09-16T07:06:57.210 回答
1

看看resolve-maven-version-conflicts.pl。它是专门用于解决 pom 冲突的合并工具。它会忽略双方都是-SNAPSHOT版本的任何更改,但留下任何其他冲突以供进一步解决。

于 2013-04-10T13:02:26.017 回答
1

我有同样的问题,我发现的所有解决方案都没有,imo,正确的。最后我写了一个合并驱动程序,它只处理项目/父版本并且只处理它们。没有更改依赖版本,也没有更改 xml 文件的格式。

我在几分钟前发布了它@https ://github.com/cecom/pomutils。如果您有任何问题,请告诉我。

于 2014-11-11T14:19:02.113 回答
1

就我而言,我有一些未来的发展要合并到发展中:

  • 示例:mybranch 中的一些功能
  • pom.xml 中的 mybranch 版本为:3.11.0-SNAPSHOT
  • mybranch 在3.10.0-SNAPSHOT 版本之前被分叉

要将新功能合并到开发中并从功能分支强制 pom.xml:

git checkout develop
  • pom.xml 中的开发版本仍然是:3.10.0-SNAPSHOT

    git 合并我的分支

所有 pom.xml 都存在冲突 + 最终还有一些其他文件。

获取所有pom.xml文件(假设除了版本没有冲突)

find -name pom.xml -not -path "**/target*" -exec git co --theirs {} +

在运行 find 命令之前,我必须解决一些其他冲突,例如在我的新分支中删除的子项目。

之后,我所有的 pom.xml 都在新版本中并且编译没有任何问题。

于 2018-10-31T17:16:05.923 回答
0

由于所有版本都相同,它不应该像通配符 pom.xml 一样简单吗?

git checkout --ours *pom.xml
于 2020-12-14T19:10:21.510 回答