3秒でわかる
リモートのリポジトリを履歴ごと手元へ複製するコマンド。ダウンロードと違い、そのままコミットもブランチ作成もでき、作業を始める最初の一歩になる。
もう少し詳しく
どういうものか
GitHub などのリモートリポジトリを、履歴と全ブランチの情報ごと手元のディレクトリへ複製するコマンドです。実行すると新しいフォルダが作られ、その中に作業ファイルと .git ディレクトリが置かれます。複製元は origin という名前で自動登録されるので、直後から git pull や git push が使えます。
ZIP でのダウンロードとの違いは履歴の有無です。ZIP は最新の状態だけをコピーした静止画のようなもので、コミットも git log もできません。clone は過去のコミット全部が手元に来るので、ネットにつながっていなくても履歴をたどれます。
なぜ必要か
チーム開発に参加するときの入口だからです。既存のプロジェクトに手を入れる作業は、ほぼ例外なく clone から始まります。
もう一つの役割は、壊れた作業ディレクトリを捨てて作り直す手段としてです。マージやリベースで手元がこじれたとき、原因を追うより別ディレクトリへ clone し直したほうが早い場面はよくあります。履歴はリモートにあるので、手元を捨てても失うのは未 push の変更だけです。
具体例
# 基本形。カレントディレクトリに repo という名前のフォルダができる
git clone https://github.com/user/repo.git
# フォルダ名を変えたいとき
git clone https://github.com/user/repo.git my-app
# 履歴が巨大で重いときは深さ 1 だけ取る
git clone --depth 1 https://github.com/user/repo.git
# 特定ブランチだけを取り出す
git clone -b develop https://github.com/user/repo.git
# 取得後の確認
cd repo
git remote -v
git log --oneline -5つまずきやすいところ
pwd で場所を確かめる癖を付けると防げますgit branch -a を打てばリモート追跡ブランチが見え、git switch develop で取り出せます--depth 1 で取ったリポジトリは履歴が切れているため、git log が浅かったり一部の操作が失敗したりします。履歴を追う予定があるなら付けません似た用語との違い
| 操作 | 何をするか |
|---|---|
| git init | 空のリポジトリを新規に作る。複製元は無い |
| git clone | 既存のリモートを履歴ごと複製する。一度きり |
| git pull | 既に clone した手元に、その後の更新を取り込む。何度でも |
| fork | GitHub 側で自分のアカウントに複製を作る。手元には何も落ちない |
他人のリポジトリへ変更を提案したい場合は、fork してから自分の fork を clone する流れになります。