pom.xml
マスターをブランチにマージするときに、バージョンタグでのマージの競合を回避する方法はありますか?私はかなりの数のpomファイル、80を持っています、そしてそれらのすべてはマスターのものとは異なる同じバージョンを持っています。git mergetool
バージョンタグのためだけに80個のpomファイルを実行するのは面倒で時間がかかります。
7 に答える
私が常に行っていることは、別のブランチから (別のバージョンで) マージする前に、 maven バージョン プラグインを使用してモジュールのバージョンを変更することです。
mvn versions:set -DnewVersion=1.1 -DgenerateBackupPoms=false
これにより、現在のすべてのモジュール (親と子) のバージョンが、newVersion パラメーターとして指定したバージョンに変更されます。バージョンを変更したら、新しいコミット (git commit...) を作成してから、マージを行います。Jenkins タスクを使用してこのすべてを自動化しましたが、他の方法 (sh スクリプトなど) で実装することは難しくありません。
おそらくいくつかの選択肢があります。どれも完璧ではありません:-/
1)'git merge -s ours'を使用できますが、残りの変更も必要ないことがわかっている場合にのみ使用してください。
2)git rerereを使用することもできます。これは、前回行ったことを記憶することで競合を解決するのに役立ちます。rerere.enabledを設定することで、その使用法をグローバルに有効にして、常に「正常に機能」するようにすることができます。または、manページを読んで、手動で行うこともできます。
pom-merge-driver のように、カスタム マージ ドライバーを使用することもできます。ワークフローによっては、プロジェクト バージョンを別の方法で処理することを除いて、pom を通常のファイルとしてマージしたい場合があります。常にマージ ブランチ バージョンを使用するか、develop ブランチにマージするときに例外を作成します...
をご覧くださいresolve-maven-version-conflicts.pl
。特に pom の競合を解決するためのマージツールです。両側が-SNAPSHOT
バージョンである変更は無視されますが、その他の競合はさらに解決するために残されます。
私の場合、開発にマージする将来の開発がいくつかあります。
- 例: 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 マージ mybranch
すべての pom.xml が競合しています + 最終的に他のファイルがいくつかあります。
すべてのpom.xml
ファイルを取得します(バージョン以外に競合がないことを前提としています)
find -name pom.xml -not -path "**/target*" -exec git co --theirs {} +
find コマンドを実行する前に、新しいブランチで削除されたサブプロジェクトなど、他のいくつかの競合を解決する必要がありました。
その後、すべての pom.xml が新しいバージョンになり、問題なくコンパイルされました。
私は同じ問題を抱えていましたが、私が見つけたすべての解決策はそれをしませんでした、imo、正しいです。最後に、プロジェクト/親バージョンとそれらのみを処理するマージ ドライバーを作成しました。依存関係のバージョンや xml ファイルの形式は変更されません。
数分前に @ https://github.com/cecom/pomutilsでリリースしました。ご不明な点がございましたら、お知らせください。