Mavenプロジェクトでは、プロジェクトのバージョンはpom.xmlファイルの<version>
属性に含まれています。 git flowモデルで新しいリリースを作成するとき、バージョン番号を変更する必要があります。 この記事 これがどのように行われるかを説明します(Mavenなし):
さらに、それは言います:
リリースブランチの開始時に、次のリリースに以前のバージョン番号ではなくバージョン番号が割り当てられます。それまで、開発ブランチは「次のリリース」の変更を反映していましたが、リリースブランチが開始されるまで、その「次のリリース」が最終的に0.3になるのか1.0になるのかは不明です。その決定は、リリースブランチの開始時に行われ、バージョン番号バンピングに関するプロジェクトのルールによって実行されます。
ここでは、Mavenに関連する2つの問題があります。
1.1-SNAPSHOT
としましょう。これをリリースブランチで単に1.1
に変更し、それをマスターにマージしました。いいよしかし、開発のためにそのブランチをマージする必要もあります。そのためには、バージョンをたとえば1.2-SNAPSHOT
。そしておそらく、コミットはリリースの一部であってはならないので、リリースブランチでそれをすべきではなかったでしょう。実際には、開発に関するすべての将来のコミットは次のバージョンに向けられるため、開発を分岐した直後にこの変更を行う必要がありました。問題をグーグルで調べたとき、プロセスを自動化できるmaven-pluginsに関する記事を見つけましたが、これは興味深いかもしれませんが、この質問は実際にはgitグラフがどのように見えるべきか、バージョンバンプコミットはどこにあるべきかではなく、 maven-pluginを使用してこれを自動化します。
通常のリリースでは、リリースブランチをマージした後、スナップショットバージョンバンプを実行します。
develop
からリリースブランチを作成し、バージョンからスナップショットを削除しますmaster
にマージしますdevelop
にマージしますdevelop
のバージョンを次のスナップショットバージョンに変更しますmaster
とdevelop
の両方をプッシュしますすべての変更を同時にプッシュすると、チームにはスナップショットバージョンの増加のみが表示されます。
ホットフィックスの場合、master
ブランチから作成するため、これは不可能です。このシナリオには回避策があります。生のgitコマンドを使用した例を次に示します。
例:master
に1.0.0
があり、1.0.1
修正プログラムバージョンを作成する場合。開発はすでに1.1.0-SNAPSHOT
にあります。
git checkout master
git checkout -b hotfix/1.0.1
mvn versions:set -DnewVersion=1.0.1
git commit -a -m "hotfix release 1.0.1"
git checkout master
git merge hotfix/1.0.1
(簡単、master
から分岐を作成したため)git checkout develop
mvn versions:set -DnewVersion=1.0.0
git commit -a -m "workaround to avoid merge conflicts"
git merge hotfix/1.0.1
(以前のコミットにより機能します)mvn versions:set -DnewVersion=1.1.0-SNAPSHOT
git commit -a -m "set version back to 1.1.0-snapshot"
あまりいいとは言えませんが、うまくいきます。このソリューションはjgitflow(git flowでサポートするMavenプラグイン)でも使用されます
Gitは、独自のバージョンルールを持つLinuxカーネル用に開発されたことに留意してください。
Mavenの場合、次のリリースのスナップショットバージョンを取得するリリースブランチを作成する必要があります。この変更は、単一のコミット(つまり、pom.xml
のバージョン番号の変更)である必要があります。それをマージするとき、master
をチェックアウトし、git merge --strategy=ours <release-branch>
を使用します
--strategy=ours
の意味:「master
のすべてがリリースブランチと正しくマージされました」と言ってマージを行います。マスターに変更は加えられていません。その後、Gitは両方のブランチのバージョン番号が異なっていても、ブランチをマージされた(つまり、変更がない)ものとして扱います。
Mavenでmaster
をビルドする際にあらゆる種類の問題を回避するには、99.DEV-SNAPSHOT
のように変化しない、奇数または非常に高いバージョン番号を使用します。
リリースを作成したら、リリースブランチのバージョンから-SNAPSHOT
を削除してコミットします。その後、マスターをチェックアウトし、--strategy=ours
ともう一度マージします。
注:これを行う場合、リリースブランチで他の変更を行わずに、バージョンを変更する必要があります。その他の修正プログラムはすべて失われます!チェリーだけを選ぶことができます。
jgitflow-maven-plugin :ゴール jgitflow:release-start および jgitflow:release-finish を使用できます。
Mavenでは、notバージョン番号を手動で変更する必要があります。
Mavenにコミットしてバージョン変更を直接プッシュさせるために、「scm」情報をpomに追加する必要があります。
次に、「リリースプラグイン」を使用します。それはあなたのために仕事をします。現在のバージョンが「1.1-SNAPSHOT」であると仮定すると、「release:perform」mavenタスクは次のようになります。
以下は、Mavenリリースプラグインが使用されているプロジェクトのgit履歴の抜粋です。
* 2345678 - Normal developpement commit (on branch 1.2-SNAPHOT).
* 5678901 - [maven-release-plugin] prepare for next development iteration
* 8901234 - (tag: 1.1) [maven-release-plugin] prepare release 1.1
* 1234567 - Normal developpement commit (on branch 1.1-SNAPHOT).
注1:リリースの時点で、次のバージョン(この例では1.2)をプロビジョニングする必要があります。気が変わったら、後で変更できます。 Maven "version:set-version"プラグインを使用すると、すべてのプロジェクト階層のバージョンを再割り当てできます。次のリリースまでにこのバージョンの変更をコミットする必要があります。
注2:リリースの時点で、リリースバージョンを変更することもできます。現在のバージョンが1.1-SNAPSHOTであっても、リリースが2.0バージョンであり、次の開発バージョンが2.1-SNAPSHOTであると判断できます。