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

無料レッスン

Git のリモートと push、pull

このレッスンのあとで: 共有サーバーから clone し、変更を push して、他の人の変更を pull することができる。

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

リモートとは何か

Git のリモートは、サーバーに置いた、リポジトリの共有コピーです。clone でコピーを取り、push で自分の変更を送り、pull で他の人の変更を受け取ります。

サークルの会計表を、5人で直すとします。共有コピーが1つあれば、全員が同じ履歴を使えます。メールで添付ファイルを送り合う必要はありません。

このレッスンのゴール

メモ

共有サーバーから clone し、変更を push して、他の人の変更を pull することができる。

大事な言葉

ことばいみれい
リモートサーバーに置いた、リポジトリの共有コピー(remote)
cloneリモートの履歴ぜんぶを、手元にコピーすることgit clone URL
push手元のコミットを、リモートに送ることgit push
pullリモートの新しいコミットを、受け取って取り込むことgit pull
originclone もとのリモートに、Git が付ける名前

学生が入力するセルは、このプレビューでは空白です。

git clone は履歴ごとコピーする

git clone は、リモートの全ファイルと全コミットを、新しいフォルダにコピーします。ラボの Gitea には、hello-git というリポジトリが入っています。

hello というフォルダにコピーします。Gitea は、このラボの別のコンテナで、gitea という名前で呼べます。

Gitea から clone する

コマンド
git clone http://gitea:3000/student/hello-git.git hello

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

リモートの名前を見る

コマンド
git -C hello remote -v

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

origin は、clone もとの名前

remote -v は、リモートの名前と URL を、取るとき(fetch)と送るとき(push)の2行で出します。名前は origin で、URL は clone で使ったものです。

履歴も一緒に来ています。次の Run で、作者とメッセージを読みます。

コピーされた履歴を読む

コマンド
git -C hello --no-pager log --format="%an: %s"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

同じマシンに、練習用のサーバーを作る

ほんもののサーバーへの push は、ラボの課題の仕事です。ここでは、同じマシンの上に、練習用の共有コピーを作ります。

--bare は、作業ツリーのない、サーバー向けのリポジトリを作ります。alice と bob は、それぞれ別の人の手元のコピーです。

共有コピーを作る

コマンド
git clone -q --bare hello office.git

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

alice の手元を作る

コマンド
git clone -q office.git alice

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

bob の手元を作る

コマンド
git clone -q office.git bob

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

git push は、手元のコミットを送る

名前をまだ教えていないなら、レッスン1の2行を先に打ちます。bob が1行足してコミットし、共有コピーへ push します。

status -sb は、ブランチの状態を1行目に出します。[ahead 1] は、リモートより1コミット進んでいる、という意味です。

bob が1行足す

コマンド
printf "Bob\n" >> bob/visitors.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

bob がコミットする

コマンド
git -C bob commit -qam "Bobを足す"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

bob の状態を見る

コマンド
git -C bob status -sb

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

bob が push する

コマンド
git -C bob push -q origin main

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

git fetch は取るだけ、pull は取り込みまで

alice はまだ bob の変更を知りません。git fetch は、リモートの新しいコミットを取ってくるだけで、手元のファイルを変えません。

取ったあと、status -sb は [behind 1] と言います。git pull は、取ってきて取り込むところまでします。

alice が fetch する

コマンド
git -C alice fetch -q

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

alice の状態を見る

コマンド
git -C alice status -sb

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

alice が pull する

コマンド
git -C alice pull -q

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

bob の変更が届いた

コマンド
git -C alice --no-pager log --format="%an: %s"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

「push が拒否された」とき、強制 push (--force) で押し通す人がいます。他の人のコミットを消すことになります。まず pull で取り込み、必要ならコンフリクトを解決してから、もう一度 push しましょう。

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

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