第10章 複数の端末で同期する¶
この章で学ぶこと¶
別の端末 (または別ディレクトリ) でリポジトリを取得する方法
git pullとgit fetchの違い認証情報がデバイスごとに必要なこと
双方向の同期フローを習慣化する手順
動機・背景¶
GitHub に push 済みのリポジトリは、別の端末からも自由に取得できます。「自宅 PC ↔ 会社 PC」「ノート PC ↔ デスクトップ」のように、複数の環境で同じ作業を継続できるのが Git + GitHub の大きな利点です。
ローカルだけで管理していると別端末への持ち運びは USB メモリやクラウドストレージに頼ることになりますが、GitHub をリモートに据えておけば、push と pull の組み合わせだけで履歴ごと同期できます。
シナリオ: 別ディレクトリにクローン¶
別の 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 の違い¶
コマンド |
動作 |
|---|---|
|
リモートの変更を 取り込むだけ (作業ツリーは変えない) |
|
|
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.email の git config も新しい端末ではセットアップが必要です。複数端末で作業を始める前に、第 3 章のセットアップを各端末で済ませておきましょう。
ハンズオン課題¶
~/my-scripts-laptopで 1 コミット作って push する~/my-scriptsに戻ってgit fetchだけ実行し、git log --oneline origin/mainで取り込まれたコミットを確認する続けて
git merge origin/mainで作業ツリーに反映する (=git pullと同じ結果)
まとめ¶
別の端末では
gh repo cloneで取得 (リモート自動登録)作業前に
git pull、作業後にgit pushを習慣にfetchは取り込むだけ、pullは取り込み + マージ認証はデバイスごとに
gh auth login