goa へのプルリクエストの送り方 (バックポート編)

goa へのプルリクエストの送り方 (バックポート編) です。

goa では互換性維持のため master と v1 を別ブランチで管理しています。そのため、プルリクエストが master にマージされたあと、その変更を v1 ブランチにバックポートするようお願いされることがあります。本編ではその手順について解説します。

1. リポジトリに移動

コンソールで以下のコマンドを実行します。

$ cd $GOPATH/src/github.com/goadesign/goa

2. v1 から新しいブランチをチェックアウト

コンソールで以下のコマンドを実行します。

$ git fetch
$ git checkout -b $BRANCHNAME origin/v1

$BRANCHNAME には任意のブランチ名を入れてください。例えばブランチ名を foo-bar-v1 とする場合は以下の様になります。

$ git checkout -b foo-bar-v1 origin/v1

3. master にマージされたコミットのハッシュを取得

コンソールで以下のコマンドを実行し、 master にマージされたブランチから対象コミットのハッシュを取得します。

$ git log --oneline $TOPICBRANCHNAME

$TOPICBRANCHNAME にはプルリクエスト編の 2. で指定したブランチ名を入れてください。今回の例ではブランチ名を foo-bar としていたため以下の様になります。

$ git log --oneline foo-bar

コマンドを実行すると以下のようにコミットログが出力されます。

a5e8203 Use os.Getwd instead of filepath.Abs
2e47e58 Delete a debug print
f54c587 Smart package name for gen_controller

先頭カラム (a5e8203 の部分) がコミットハッシュなのでこれを控えておきます。

4. master にマージされたコミットをチェリーピック

コンソールで以下のコマンドを実行し、 3. で取得したコミットをチェリーピックします。

$ git cherry-pick $COMMITHASH

$COMMITHASH には 3. で取得したコミットハッシュを入れてください。コミットが複数ある場合はチェリーピックもその回数行います。

5. make できることを確認

コンソールで以下のコマンドを実行します。

$ make

これにはプログラムのビルドやテストコードの実行が含まれています。何らかのエラーが発生した場合はコードを修正しそれらを解決します。

6. リモートリポジトリにプッシュ

コンソールで以下のコマンドを実行します。

$ git push -u mine $BRANCHNAME

$BRANCHNAME には 2. で指定したブランチ名を入れてください。今回の例ではブランチ名を foo-bar-v1 としていたため以下の様になります。

$ git push -u mine foo-bar-v1

7. GitHub でプルリクエストを作成

プルリクエスト編の「 7. GitHub でプルリクエストを作成」を参考にプルリクエストを作成します。

これで完了です。じきにプルリクエストがマージされるでしょう。 v1 ブランチはセマンティックバージョニングされており、数ヶ月毎に新しいマイナーバージョンがリリースされています。そのルールに従って、今回の修正も次のマイナーバージョンに含まれることになるでしょう。