Git слить конфликт только на теге версии в pom.xml

Есть ли способ избежать конфликтов слияния в теге версии в pom.xml при слиянии мастера в ветке? У меня довольно много файлов pom, 80, и все они имеют одну и ту же версию, которая отличается от версии в master. Выполнение git mergetool для файлов размером 80 pom только для тега версии было трудоемким и длительным.

Ответ 1

У вас, вероятно, есть несколько вариантов. Ни один из них не идеален: -/

1) вы можете использовать 'git merge -s ours', но вы должны делать это только тогда, когда знаете, что вам тоже не нужны остальные изменения.

2) Вы также можете использовать git rerere, что помогает разрешать конфликты, запоминая, что вы делали в прошлый раз. Вы можете включить его использование во всем мире, чтобы он всегда "просто работал", установив rerere.enabled. Или вы можете прочитать страницу руководства и сделать это вручную.

Ответ 2

То, что я всегда делаю, - это изменить версию модулей с помощью плагина версий maven перед слиянием с другой веткой (с другой версией):

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

Это изменит версию всех текущих модулей (родительский и дочерний) на тот, который вы укажете в качестве параметра newVersion. После изменения версии сделайте новый commit (git commit...), а затем выполните слияние. У меня все это автоматизировано с использованием задачи Jenkins, но не сложно выполнить ее другими способами (например, sh script).

Ответ 3

Вы также можете использовать пользовательский драйвер слияния, как в pom-merge-driver. В зависимости от вашего рабочего процесса вы можете захотеть скомпилировать pom как обычный файл, за исключением обработки версии проекта по-разному: всегда принимать версию слияния ветвей или делать исключение при слиянии с ветвью разработки...

Ответ 4

Взгляните на resolve-maven-version-conflicts.pl. Это mergetool специально для разрешения конфликтов pom. Он игнорирует любые изменения, когда обе стороны являются версиями -SNAPSHOT, но оставляют любые другие конфликты для дальнейшего разрешения.

Ответ 5

У меня была та же проблема, и все решения, которые я нашел, не сделали, imo, правильно. Наконец, я написал драйвер слияния, который заботится только о проекте/родительской версии и только о них. Изменена версия зависимостей и формат файла xml.

Я выпустил его несколько минут назад @https://github.com/cecom/pomutils. Если у вас есть какие-либо вопросы, сообщите мне.

Ответ 7

В моем случае у меня есть некоторые будущие разработки, чтобы слиться с разработкой:

  • пример: некоторые функции в mybranch
  • Версия mybranch в pom.xml: 3.11.0-SNAPSHOT
  • mybranch был разветвлен до версии 3.10.0-SNAPSHOT

Чтобы объединить новые функции в разработке и вызвать pom.xml из ветки функций:

git checkout develop
  • разработать версию в pom.xml по-прежнему: 3.10.0-SNAPSHOT

    Git Merge MyBranch

все pom.xml находятся в конфликте + в конечном итоге некоторые другие файлы.

взять все пом (если предположить, что только версия имеет конфликты)

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

Мне пришлось восстанавливать некоторые другие конфликты, такие как, например, удаленный подпроект в моей новой ветке перед запуском команды find.

После этого все мои pom.xml были в новой версии и компилировались без проблем.