gitのリモートブランチの運用

はじめに

リリース運用を久しぶりにやったのでメモがてら
github使ってます。 ローカルはWindowsでWSLからgitコマンド実行。

前提として、下記の運用
・特定日リリース用にdevelopブランチを作成
・featureブランチはdevelopブランチへプルリクし、ソースレビューOKならマージ
・テスト環境にdevleopブランチを反映し、業務部門に動作確認してもらい、OKならmasterへプルリク
・リリース時はmasterブランチへマージしたものが本番に上がる

1.ローカルにて対象ソースのディレクトリまで移動

cd /mnt/src/my_project/

2.masterに切り替え

git checkout master

3.masterに切り替わっていることを確認

$ git branch
* master

4.masterを最新化(リモートブランチと同期)

git pull

5.masterとの差分がないことを確認

$ git commit
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

※コミット対象がないことを確認する。コミットメッセージの入力を求められた場合はmasterブランチと同期がとれてない。

6.次の定期リリース用ブランチを作成(名前は「dev/次回定期リリース日」)

git checkout -b dev/20191018

7.リモートブランチにプッシュ

git push origin dev/20191018

8.マージされていないプルリクを新しいリモートブランチに付け替え

リストにあるプルリクを新しく作成したリモートブランチに紐づけなおす。
プルリクの番号だけだと心もとないのでgithubの画面見ながらやってます。

特定のブランチに出しているプルリクは下記のように指定してあげればOK
f:id:katutoki:20191021173538p:plain

is:pr is:open base:dev/20191010 

is:pr:プルリク
is:open:オープンなステータス
base:ブランチ名:ブランチにマージされるプルリクエス
他にも色々フィルタに指定できるみたい。
興味ある方は以下を参考に Searching issues and pull requests - GitHub ヘルプ

あとはそれぞれのプルリクのページで「edit」でブランチ名を1個1個変えてます。

9.リリース対象のリモートブランチ削除

この運用だとdevelopブランチがどんどんたまっていくので、
本番リリースが終わったらdevelopブランチは都度削除します。

git push --delete origin dev/20191018

おまけ

ブランチに紐づいているマージされていないプルリクの一覧をAPIでやってみる 下記を参考にしました。
Pull Requests | GitHub Developer Guide

・例)dev/20191010ブランチに出しているプルリクのID、タイトルをリスト表示

curl https://api.github.com/repos/:owner/:repo/pulls?base=dev%2F20191010 -u アカウント名:アクセスキー | jq -r '.[] | [.number, .title] | @tsv'

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 95114  100 95114    0     0   219k      0 --:--:-- --:--:-- --:--:--  219k
1234    プルリクその1
1235    プルリクその2
1236    プルリクその3
1237    プルリクその4

ポイントとしてはブランチ名に「/」などがある場合はhtlmエンコードしてあげないといけないこと。
アクセスキーは昔はURLパラメータでよかったようだが、現在はBasic認証の形式で渡さないといけないこと。
 curlだと-uオプション。アクセスキーはアカウントのパスワードでも接続できるが、セキュリティ的にアウトなので、アクセスキー発行して使うのがよさげ。

参考

GitHub APIでPull Requestを取得する - Qiita

GitHub「Personal access tokens」の設定方法 - Qiita