2人で1つの価格表
小さな店で、2人の店員が同じ午後に価格表を直しました。1人は値段を上げ、もう1人は同じ行の誤字を直しました。
1つのフォルダを共有していたら、どちらかの仕事が消えます。バージョン管理は両方の版を残し、どこでぶつかったかを正確に見せます。
このレッスンのゴール
メモ
ブランチで作業して、メインにマージできる。
大事な言葉
| ことば | いみ |
|---|---|
| リモート | サーバーに置いた、リポジトリの共有コピー(remote) |
| クローン | 履歴ごとリポジトリをコピーすること(clone) |
| ブランチ | 自分のコミットを持つ、作業の別の流れ(branch) |
| マージ | あるブランチの仕事を、別のブランチに取り込むこと(merge) |
| コンフリクト | 2つのブランチが同じ行を変えて、ぶつかること(conflict) |
学生が入力するセルは、このプレビューでは空白です。
クローンは履歴ぜんぶをコピーする
リモートは、Gitea のようなサーバーに置いた、リポジトリの共有コピーです。作業するにはクローンします。すべてのファイルと、過去のコミットがすべて手に入ります。
ラボの Gitea には hello-git というリポジトリがあります。最初の Run で review という練習用フォルダにクローンします。次の Run で、新しい順に履歴を読みます。
review にクローンする
git clone http://gitea:3000/student/hello-git.git reviewここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
履歴を1行ずつ読む
git -C review --no-pager log --format="%h|%an|%s"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ブランチは、仕事を別に保つ
ブランチは、自分のコミットを持つ流れです。ブランチでファイルを変えても、メインはそのままです。
コミットには、作った人が記録されます。先に、このフォルダ用の名前とアドレスを Git に教えます。そのあと late-opening というブランチを作り、1行を変えます。
このフォルダは練習用です。push はしません。
このフォルダ用の名前
git -C review config user.name "Student"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
このフォルダ用のアドレス
git -C review config user.email "[email protected]"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ブランチを作って移る
git -C review switch -c late-openingここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ブランチで1行を変える
sed -i 's/Ada Lovelace/Ada Lovelace (host)/' review/visitors.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ブランチでコミットする
git -C review commit -am "Mark Ada as the host"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
マージは2つの流れを合わせる
2つのブランチが別々の行を変えたなら、Git は手助けなしでマージします。同じ行を変えたときは、Git は選べないので、止まってあなたに聞きます。これがコンフリクトです。
わざとコンフリクトを起こします。メインに戻って、同じ行を別の形で変え、コミットします。そのあと、もう1つのブランチをマージします。
メインに戻る
git -C review switch mainここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
同じ行を別の形で変える
sed -i 's/Ada Lovelace/Ada L. Lovelace/' review/visitors.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
メインでコミットする
git -C review commit -am "Use the full initials"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
もう1つのブランチをマージ
git -C review merge late-openingここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
Git が書いた内容を読む
cat review/visitors.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
3つの印の行が2つの版を分ける
Git は両方の版をファイルに書きました。<<<<<<< HEAD の行から、今いるブランチの版が始まります。======= の行で、その版が終わります。>>>>>>> late-opening の行で、もう1つの版が終わります。
解決するには、ほしい文章にファイルを直し、3つの印の行を消します。そのあと git add と git commit をします。
ここでは解決せず、マージを取り消します。
マージを取り消す
git -C review merge --abortここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
2つのブランチをグラフで見る
git -C review --no-pager log --oneline --graph --allここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
コンフリクトは、リポジトリが壊れたか、だれかが間違えたしるしだと思う人が多いです。違います。2人が同じ行を変えた、というだけです。何も失われていません。正しい文章を選ぶか、merge --abort でマージの前に戻ります。
もう一歩先へ
review でもう一度マージし、今度は解決しましょう。行を Ada L. Lovelace (host) にし、3つの印の行を消してから、ファイルを git add します。コミットは --no-edit をつけます。エディタを開かず、Git のメッセージをそのまま使えます。
もう一度グラフを出し、マージのコミットがほかとどう違うかを説明しましょう。push はしません。review は練習用のままです。