本物のサーバーでのプルリクエスト
チームは、コードを Gitea や GitHub のようなサーバーに置きます。メインのブランチは、だれも直接は変えません。ブランチを push し、プルリクエストを出し、同僚が先に読みます。
このレッスンでは、ラボの Gitea で、push からマージまでを全部やります。
このレッスンのゴール
メモ
ブランチを push し、サーバーでプルリクエストを出して、マージすることができる。
大事な言葉
| ことば | いみ |
|---|---|
| プルリクエスト | ブランチのマージをお願いする依頼と、確認用のページ |
| API | プログラムがサーバーに頼みごとをする入口 |
| マージ可能 | コンフリクトなしでマージできること(mergeable) |
| マージコミット | 2つのブランチをつなぐ、親が2つのコミット |
| 上流 | 自分のブランチとつながっている、リモートのブランチ(upstream) |
学生が入力するセルは、このプレビューでは空白です。
ブランチは先にサーバーへ送る
プルリクエストを出すには、ブランチがサーバーにある必要があります。だから先に push します。Git だけでは、依頼は出せません。
まず Gitea にリポジトリを作ります。プログラムは API を呼んで作れます。git push の -u は、手元のブランチを、リモートの対になるブランチ(上流)につなぎます。ラボのパスワードは公開なので、ここでは URL に書いて構いません。本物のパスワードでは絶対にやってはいけません。
Gitea にリポジトリを作る
curl -s -o /dev/null -w '%{http_code}\n' -u student:student -H 'Content-Type: application/json' -d '{"name":"club-review","auto_init":true,"default_branch":"main"}' http://gitea:3000/api/v1/user/reposここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
clone する
git clone http://student:student@gitea:3000/student/club-review.gitここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
変更用のブランチを作る
git -C club-review switch -c tea-priceここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
README に1行足す
printf 'お茶は月曜から200円です。\n' >> club-review/README.mdここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
変更をコミットする
git -C club-review commit -am "お茶の値段を書く"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ブランチを push する
git -C club-review push -u origin tea-priceここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
プルリクエストを出して、レビューする
リポジトリのページで New Pull Request を押すか、API に頼みます。ボタンがしていることは、これです。サーバーは、ブランチがマージ可能かを調べます。
レビューする人は、差分を読み、コメントを書きます。Gitea は自分の変更の承認を認めないので、ここではコメントします。チームでは、同僚が承認します。
プルリクエストを出す
curl -s -o /dev/null -w '%{http_code}\n' -u student:student -H 'Content-Type: application/json' -d '{"title":"お茶の値段を書く","head":"tea-price","base":"main","body":"お茶は月曜から200円です。"}' http://gitea:3000/api/v1/repos/student/club-review/pullsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
コンフリクトなしでマージできるか聞く
curl -s http://gitea:3000/api/v1/repos/student/club-review/pulls/1 | grep -o '"mergeable":[a-z]*'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
レビューのコメントを書く
curl -s -o /dev/null -w '%{http_code}\n' -u student:student -H 'Content-Type: application/json' -d '{"body":"よさそうです。"}' http://gitea:3000/api/v1/repos/student/club-review/issues/1/commentsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
レビューする人として差分を読む
curl -s http://gitea:3000/api/v1/repos/student/club-review/pulls/1.diffここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
マージはサーバーで起きる
レビューが終わると、だれかが Merge を押します。サーバーは main にマージコミットを作ります。手元のパソコンは、まだ知りません。
そこで git fetch を打ちます。手元のファイルを変えずに、新しいものだけを取ります。そのあと、サーバーのブランチの写しである origin/main の履歴を読みます。
プルリクエストをマージする
curl -s -o /dev/null -w '%{http_code}\n' -u student:student -H 'Content-Type: application/json' -d '{"Do":"merge"}' http://gitea:3000/api/v1/repos/student/club-review/pulls/1/mergeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
新しいものを取る
git -C club-review fetchここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
サーバーの main の履歴を描く
git -C club-review --no-pager log --graph --format=%s origin/mainここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
プルリクエストをマージすると、自分のパソコンのファイルが変わると思いがちです。変わりません。マージはサーバーで起きます。見るには git fetch、手元の main に取り込むには main に切り替えて git pull を打ちます。