In a nutshell
GitHub における fork
,clone
,pull
の役割と違いを解説する入門記事である.fork は GitHub 上の複製,clone はローカルへの複製,pull はリモートの更新の取得である.初学者が正しい操作手順を理解し,円滑にプロジェクトへ参加するための基礎を提供する.
はじめに
Gitについて,fork
,clone
,pull
という操作がある.これらはそれぞれ異なる役割と目的を持つが,時々混乱する事があるので,改めて理解する為に,以下に纏めた.
予想される読み手
- Git 及び GitHub について初学者である
- チームでの開発,プロジェクトを扱う
- 他人が作成したリポジトリを利用,拡張したい
fork(フォーク)について
fork とは,他人の GitHub リポジトリを,自分のアカウント上に複製する操作である.これは GitHub 上でのみ行われ,ローカル環境には影響を与えない.主に他人のプロジェクトに対して修正提案(プルリクエスト)を送りたいときに用いられる.
例:
オープンソースのライブラリにバグを見つけ,修正したいと考えたとする.その場合,まずリポジトリを fork し,自分の GitHub 上で自由に変更を加える.その後,オリジナルのリポジトリに対してプルリクエストを送ることで,修正を提案できる.
特徴:
- GitHub 上の操作のみで完結する
- 親リポジトリとの関連が保たれる
- 他人のリポジトリに直接書き込む権限がなくても作業が可能になる
2. clone(クローン)について
clone とは,リモート(GitHub など)上のリポジトリを,ローカル環境(自分のPC)にコピーする操作である.これにより,ソースコードを手元で閲覧・編集・ビルド・実行することが可能になる.
コマンド例:
git clone https://github.com/ユーザー名/リポジトリ名.git
特徴:
- 実際にローカルディレクトリとしてファイルが取得される
- 多くの場合,作業の出発点として最初に行う操作である
- clone した時点では,そのリポジトリの最新状態が取得される
3. pull(プル)について
pull とは,リモートリポジトリの最新の変更をローカルリポジトリに取り込む操作である.チーム開発では,他の開発者が変更を加えることが頻繁にあるため,定期的に git pull
を行うことが推奨される.
コマンド例:
git pull origin main
特徴:
-
git fetch
+git merge
の操作を一括で行う.fetch
はリモートの変更をローカルに「取得」するだけで,自動的にはマージされない.pull
は取得とマージを同時に行う点が異なる. - 他人が加えた変更を取り込み,ローカルと同期を取るために使われる
- ローカルに変更がある場合は,マージやコンフリクト解消が必要になることもある
よくある疑問
fork と clone の違いは何か?
fork は GitHub 上にコピーを作る操作 であり,clone は ローカルPCにコピーを作る操作 である.fork は他人のリポジトリに貢献するための第一歩として使われ,clone は作業を開始するためにローカルにコードを取得するために使われる.
fork した後に clone は必要か?
必要である.fork は GitHub 上の自分のアカウントにコピーを作成するだけであるため,実際に作業するにはその fork したリポジトリを clone してローカルに落とす必要がある.
実際の開発フロー(例)
- 他人のリポジトリを fork(GitHub 上)
- 自分の fork 先を clone(ローカルPC)
- ローカルで作業・変更・コミット
- GitHub 上の fork に push
- 元のリポジトリに対して pull request(プルリクエスト)を送る. pull requestとは,自分の変更内容をオリジナルのリポジトリに提案し,レビュー・マージしてもらうための GitHub 上の仕組みである.
まとめ表
用語 | 操作対象 | 主な目的 | 実行場所 |
---|---|---|---|
fork | GitHubリポジトリ | 他人のリポジトリをコピー | GitHub(Web) |
clone | GitHubリポジトリ | ローカルPCにコピー | ターミナル |
pull | GitHub->ローカル | GitHub上の最新変更を取り込む | ターミナル |
Summary
-
fork
は他人のリポジトリを GitHub 上に複製し,貢献のための基盤を作る操作である. -
clone
はリポジトリをローカル環境に取得し,編集やビルドを可能にする操作である. -
pull
はリモートリポジトリの更新をローカルに反映させるために使う. - fork -> clone -> 編集 -> push -> pull request が基本フローである.
- fork と clone の違いは,GitHub 上の複製か,ローカルへの複製かである.
- チーム開発では pull を定期的に行い,他者の変更と同期することが推奨される.
References
Chacon, S., & Straub, B. (2020). Pro Git 日本語版(第2版
GitHub. (n.d.). GitHub Docs (日本語)