Есть ли способ избежать конфликтов слияния в теге версии в pom.xml
при слиянии мастера в ветке? У меня довольно много файлов pom, 80, и все они имеют одну и ту же версию, которая отличается от версии в master. Выполнение git mergetool
для файлов размером 80 pom только для тега версии было трудоемким и длительным.
Git слить конфликт только на теге версии в pom.xml
Ответ 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. Если у вас есть какие-либо вопросы, сообщите мне.
Ответ 6
Этот связанный вопрос помогает с большей спецификой вокруг команды слияния: git - пропускает определенные коммиты при слиянии
Ответ 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 были в новой версии и компилировались без проблем.