第10章 複数の端末で同期する

この章で学ぶこと

  • 別の端末 (または別ディレクトリ) でリポジトリを取得する方法

  • git pullgit fetch の違い

  • 認証情報がデバイスごとに必要なこと

  • 双方向の同期フローを習慣化する手順

動機・背景

GitHub に push 済みのリポジトリは、別の端末からも自由に取得できます。「自宅 PC ↔ 会社 PC」「ノート PC ↔ デスクトップ」のように、複数の環境で同じ作業を継続できるのが Git + GitHub の大きな利点です。

ローカルだけで管理していると別端末への持ち運びは USB メモリやクラウドストレージに頼ることになりますが、GitHub をリモートに据えておけば、pushpull の組み合わせだけで履歴ごと同期できます。

シナリオ: 別ディレクトリにクローン

別の PC が手元になくても、同じ PC の別ディレクトリにクローンすれば「2 台目の端末」を再現して練習できます。

cd ~
mkdir my-scripts-laptop
cd my-scripts-laptop
gh repo clone <your-id>/my-scripts .

注釈

<your-id> はあなたの GitHub ユーザー名に置き換えてください。最後の . は「カレントディレクトリに展開する」指定です。

期待出力:

Cloning into '.'...
remote: Enumerating objects: ...
Receiving objects: 100% (...)
Resolving deltas: 100% (...)

clone 直後の状態

git status
git log --oneline
git remote -v

origin リモートが既に登録されていることに注目してください。gh repo clone は内部的に git clone を呼び出すため、リモートの登録まで自動で済んでいます。

別ディレクトリで編集 → push

Add-Content -Encoding utf8 -Path README.md -Value ""
Add-Content -Encoding utf8 -Path README.md -Value "## ライセンス"
Add-Content -Encoding utf8 -Path README.md -Value ""
Add-Content -Encoding utf8 -Path README.md -Value "このスクリプトはMITライセンスで公開しています。"
git add README.md
git commit -m "describe license in README"
git push

元のディレクトリに戻って pull

cd ~/my-scripts
git pull

期待出力例:

Updating abc1234..def5678
Fast-forward
 README.md | 4 ++++
 1 file changed, 4 insertions(+)

git log --oneline を実行すると、別ディレクトリで作成した「ライセンス」のコミットが反映されていることを確認できます。

fetch と pull の違い

コマンド

動作

git fetch

リモートの変更を 取り込むだけ (作業ツリーは変えない)

git pull

fetch + 取り込んだ変更を作業ツリーにマージ

Tip

まず fetch してから git log origin/main で内容を確認 → 問題なければ git merge origin/main という慎重な流れもあります。pull はこの 2 つを 1 コマンドにまとめたものです。

双方向の同期フロー (1 人運用版)

git pull
git status
git add <変更ファイル>
git commit -m "..."
git push

警告

1 人運用でもうっかり「pull せずに push」をやると、別端末で先に push した変更とぶつかって ! [rejected] エラーになります。作業開始時に必ず git pull を習慣化しましょう。エラーが出た場合は付録 B を参照してください。

認証情報はデバイスごと

別の PC で初めて GitHub を操作するときは、その PC で gh auth login を実行する必要があります (第 3 章参照)。GitHub の認証はデバイス + ユーザー単位で管理されているため、ある PC で済ませた認証設定が別の PC に「自動で持ち込まれる」ことはありません。

同じ理由で、user.name / user.emailgit config も新しい端末ではセットアップが必要です。複数端末で作業を始める前に、第 3 章のセットアップを各端末で済ませておきましょう。

ハンズオン課題

  1. ~/my-scripts-laptop で 1 コミット作って push する

  2. ~/my-scripts に戻って git fetch だけ実行し、git log --oneline origin/main で取り込まれたコミットを確認する

  3. 続けて git merge origin/main で作業ツリーに反映する (= git pull と同じ結果)

まとめ

  • 別の端末では gh repo clone で取得 (リモート自動登録)

  • 作業前に git pull、作業後に git push を習慣に

  • fetch は取り込むだけ、pull は取り込み + マージ

  • 認証はデバイスごとに gh auth login