クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

Gitea でプルリクエストを出してマージする

このレッスンのあとで: ブランチを push し、サーバーでプルリクエストを出して、マージすることができる。

60分のレッスンコマンド13件Git と Gitea のラボ:自分専用の Git サーバーでクローン、コミット、プッシュを学ぶ

本物のサーバーでのプルリクエスト

チームは、コードを 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 を打ちます。

このラボとソースについて: Git と Gitea のラボ:自分専用の Git サーバーでクローン、コミット、プッシュを学ぶ

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。