プロジェクトのルートPOMに以下の設定が書かれている必要がある。
<scm> <connection>scm:git:[email protected]/your-project.git</connection> <developerConnection>scm:git:[email protected]/your-project.git</developerConnection> </scm>
Mavenのリリース処理をリモートにpushしないように以下の設定を追加。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version><!-- pluginのバージョン --></version> <configuration> <goals>deploy</goals> <!-- リモートにプッシュしないように --> <pushChanges>false</pushChanges> <localCheckout>true</localCheckout> </configuration> </plugin>
# リリース作業を開始 $(develop):: git flow release start v1.0.0 # 調整作業を行う... # リリースを行う(タグの名前はv1.0.0のように指定する) $(release/v1.0.0):: mvn release:prepare release:perform # release:prepareで1.0.1-SNAPSHOTにされてしまっているので、一旦戻す $(release/v1.0.0):: git reset --hard HEAD^ # maven-release-pluginがタグ付けを行っているので、git flowではタグを付けないように完了させる(-nオプション) $(release/v1.0.0):: git flow release finish -n v1.0.0 # 直前にreset --hardした次期開発バージョン用のPOM変更コミットのsha-1を探す $(develop):: git reflog | grep "prepare for next development" # 見つかったコミットを戻す $(develop):: git cherry-pick <見つかったsha-1をここに指定> # develop, master, tagをリモートにpush $(develop):: git push && git push --tags
随分前に書かれたものに対してのコメントで恐縮ですが、
まず
git flow release finish
を-n
でタグ付けなしでやってから maven-release-plugin でリリースするのはどうでしょうか。そうすると戻したりごにょごにょしなくてよくなります。git flow release finish
はリリース完了じゃなくてリリース準備完了という意味だと思いますし。