リモートとは何か
Git のリモートは、サーバーに置いた、リポジトリの共有コピーです。clone でコピーを取り、push で自分の変更を送り、pull で他の人の変更を受け取ります。
サークルの会計表を、5人で直すとします。共有コピーが1つあれば、全員が同じ履歴を使えます。メールで添付ファイルを送り合う必要はありません。
このレッスンのゴール
メモ
共有サーバーから clone し、変更を push して、他の人の変更を pull することができる。
大事な言葉
| ことば | いみ | れい |
|---|---|---|
| リモート | サーバーに置いた、リポジトリの共有コピー(remote) | |
| clone | リモートの履歴ぜんぶを、手元にコピーすること | git clone URL |
| push | 手元のコミットを、リモートに送ること | git push |
| pull | リモートの新しいコミットを、受け取って取り込むこと | git pull |
| origin | clone もとのリモートに、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 しましょう。