「GitHubのプロジェクトをローカルに持ってきたいけど、どうすればいい?」「クローンに時間がかかりすぎる」「Permission deniedエラーが出て困っている」といった悩みを抱えていませんか。この記事ではgit cloneコマンドの基本から、高速化テクニック、トラブルシューティングまで、実際の開発シーンで役立つ知識を網羅的に解説します。
git cloneの概要
git cloneは、リモートリポジトリを新しいディレクトリに複製するGitコマンドです。他のバージョン管理システム(Subversionなど)が作業コピーのみを取得するのとは異なり、Gitではリポジトリの全履歴、ブランチ、コミット情報をローカルに完全コピーします。
これにより、ネットワーク接続がなくてもコミット履歴の閲覧やブランチの切り替えが可能になります。万が一リモートサーバーに問題が発生しても、どのクローンからでもリポジトリを復旧できるという堅牢性も備えています。
基本的な使い方
コマンド構文
git clone [<options>] <repository> [<directory>]<repository>にはクローン元のURLを、<directory>にはクローン先のディレクトリ名を指定します。ディレクトリ名を省略すると、リポジトリ名がそのまま使われます。
クローン時に実行される処理
git cloneを実行すると、以下の処理が自動的に行われます。まず新しいディレクトリが作成され、その中に.gitディレクトリが初期化されます。続いてリモートリポジトリの全データがダウンロードされ、最新の作業コピーがチェックアウトされます。また、originという名前でリモート接続が自動設定されます。
基本的なクローン例
# HTTPSでクローン
git clone https://github.com/user/repo.git
# SSHでクローン
git clone git@github.com:user/repo.git
# 別名のディレクトリにクローン
git clone https://github.com/user/repo.git my-projectHTTPSとSSHのどちらを使うかは、認証方法の設定によって決まります。SSHキーを設定済みの場合はSSH形式が便利ですが、そうでなければHTTPSを使うのが一般的です。
URLフォーマット
git cloneは複数のプロトコルに対応しています。環境や要件に応じて適切なものを選びましょう。
SSH
git@github.com:username/repo.git
ssh://[user@]host[:port]/path/to/repo.gitSSHは一度キーを設定すれば、クローンやプッシュのたびにパスワードを入力する必要がありません。チーム開発では最も一般的な選択肢です。
HTTPS
https://github.com/username/repo.git
https://gitlab.com/username/repo.gitHTTPSはファイアウォール環境でも通常は利用可能です。ただし、GitHubでは2021年8月以降、パスワード認証が廃止されており、Personal Access Token(PAT)が必要になります。
ローカルパス
/path/to/repo.git
file:///path/to/repo.git同じマシン上の別のリポジトリからクローンする場合に使用します。ハードリンクを活用して高速にコピーできます。
主要オプション
特定ブランチをクローンする
開発ブランチやリリースブランチなど、特定のブランチだけが必要な場合は-bオプションを使います。
# developブランチをクローン
git clone -b develop https://github.com/user/repo.git
# 特定のタグをチェックアウト
git clone -b v1.0.0 https://github.com/user/repo.git--single-branchオプションを組み合わせると、指定したブランチの履歴のみをダウンロードできます。
# developブランチのみをクローン(他のブランチは取得しない)
git clone -b develop --single-branch https://github.com/user/repo.git浅いクローン(Shallow Clone)
--depthオプションを使うと、履歴を指定したコミット数に制限できます。大きなリポジトリでクローン時間を短縮したい場合に有効です。
# 最新1コミットのみ
git clone --depth 1 https://github.com/user/repo.git
# 最新10コミットのみ
git clone --depth 10 https://github.com/user/repo.gitCI/CDパイプラインでビルドだけを実行する場合など、履歴が不要なケースでは浅いクローンが最適です。ただし、git logで過去の履歴を遡ったり、git blameでコードの変更履歴を調べたりする機能は制限されます。
部分クローン(Partial Clone)
Git 2.19以降で導入された部分クローンは、浅いクローンよりも柔軟な選択肢です。--filterオプションを使って、どのオブジェクトをダウンロードするかを細かく制御できます。
# Blobless clone(ファイル内容を遅延ダウンロード)
git clone --filter=blob:none https://github.com/user/repo.git
# 1MB以上のファイルを遅延ダウンロード
git clone --filter=blob:limit=1m https://github.com/user/repo.git
# Treeless clone(CI/CD向け、コミット情報のみ)
git clone --filter=tree:0 https://github.com/user/repo.gitBlobless cloneは全てのコミット履歴とディレクトリ構造をダウンロードしますが、ファイル内容は必要になった時点でオンデマンドで取得します。Azure DevOpsの測定では、部分クローンにより平均88.6%のクローン時間削減が報告されています。
サブモジュール付きクローン
サブモジュールを含むリポジトリをクローンする場合は、--recurse-submodulesオプションを付けます。
# サブモジュールも一緒にクローン
git clone --recurse-submodules https://github.com/user/repo.git
# サブモジュールも浅くクローン
git clone --recurse-submodules --shallow-submodules https://github.com/user/repo.gitこのオプションを忘れると、サブモジュールのディレクトリは空の状態になります。後からサブモジュールを初期化するにはgit submodule update --init --recursiveを実行してください。
ベアリポジトリとミラー
サーバー上でGitリポジトリをホスティングする場合は、ベアリポジトリを作成します。
# ベアリポジトリ(作業ディレクトリなし)
git clone --bare https://github.com/user/repo.git repo.git
# ミラー(全てのrefsを完全コピー)
git clone --mirror https://github.com/user/repo.gitベアリポジトリには作業ディレクトリ(チェックアウトされたファイル)がなく、.gitディレクトリの内容だけが存在します。ミラーはさらに全てのリファレンス(ブランチ、タグ、リモート追跡ブランチなど)を完全にコピーします。
クローン方式の比較
用途に応じた最適なクローン方式を選ぶために、各方式の特徴を比較してみましょう。
| 項目 | 通常クローン | 浅いクローン | 部分クローン(Blobless) |
|---|---|---|---|
| コミット履歴 | 全履歴 | 指定数のみ | 全履歴 |
| ファイル内容 | 全バージョン | 最新のみ | オンデマンド |
| 初回ダウンロード | 大きい | 小さい | 中程度 |
git logの動作 | 正常 | 制限あり | 正常 |
git blameの動作 | 正常 | 不可 | 初回は遅い |
| CI/CDでの利用 | △ | ◎ | ○ |
| 開発者の日常利用 | ◎ | × | ○ |
日常的な開発作業には通常クローンか部分クローン、CI/CDパイプラインには浅いクローンまたはTreeless cloneが適しています。
認証設定
SSH認証の設定
SSHキーを使った認証は、一度設定すれば毎回のパスワード入力が不要になります。
# ED25519形式のSSHキーを生成(推奨)
ssh-keygen -t ed25519 -C "your_email@example.com"
# ssh-agentを起動してキーを追加
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
# GitHubへの接続をテスト
ssh -T git@github.com生成された公開鍵(~/.ssh/id_ed25519.pub)をGitHubの設定画面から登録してください。登録後はgit@github.com:user/repo.git形式のURLでクローンできます。
HTTPS + Personal Access Token
GitHubではパスワード認証が廃止されているため、HTTPSを使う場合はPersonal Access Token(PAT)が必要です。
git clone https://github.com/user/repo.git
# Username: your_username
# Password: <Personal Access Tokenを入力>毎回トークンを入力するのが面倒な場合は、クレデンシャルヘルパーを設定してキャッシュできます。
# 認証情報を1時間キャッシュ
git config --global credential.helper 'cache --timeout=3600'よくあるエラーと対処法
Permission denied (publickey)
SSHでクローンしようとした時に最もよく遭遇するエラーです。SSHキーが正しく設定されていない場合に発生します。
# ssh-agentにキーが登録されているか確認
ssh-add -l
# 登録されていなければ追加
ssh-add ~/.ssh/id_ed25519
# GitHubへの接続をテスト
ssh -T git@github.com接続テストで「Hi username!」と表示されれば、SSH認証は正常に機能しています。
Repository not found
このエラーはURL間違い、リポジトリが非公開、アクセス権限がないなど、複数の原因で発生します。
# URLが正しいか確認(既存のローカルリポジトリの場合)
git remote -vプライベートリポジトリの場合は、そのリポジトリへのアクセス権限があるアカウントで認証されているか確認してください。
SSL certificate problem
企業ネットワークなどで独自のSSL証明書を使っている環境で発生することがあります。
# CA証明書を更新(Ubuntu/Debian)
sudo apt update && sudo apt install ca-certificates
# 一時的な回避策(セキュリティリスクがあるため非推奨)
git config --global http.sslVerify falseRPC failed / Connection timed out
大きなリポジトリをクローンする際にタイムアウトが発生する場合があります。
# HTTPバッファサイズを増やす
git config --global http.postBuffer 524288000
# または浅いクローンを試す
git clone --depth 1 https://github.com/user/large-repo.gitUNPROTECTED PRIVATE KEY FILE
SSHキーのパーミッションが緩すぎる場合に発生します。
# 秘密鍵のパーミッションを600に設定
chmod 600 ~/.ssh/id_ed25519git clone / git init / git pull の違い
Gitの初期設定でよく混同される3つのコマンドの違いを整理します。
| コマンド | 用途 | いつ使う? |
|---|---|---|
git clone | リモートリポジトリをローカルにコピー | プロジェクトを最初に取得するとき |
git init | 新しい空のリポジトリを作成 | 新規プロジェクトを始めるとき |
git pull | リモートの変更をローカルに反映 | 既存のローカルリポジトリを更新するとき |
git cloneは最初の1回だけ使い、その後の更新にはgit pullを使います。新しいプロジェクトをゼロから始める場合はgit initでリポジトリを作成し、リモートリポジトリを後から設定します。
CI/CDでのベストプラクティス
CI/CDパイプラインでは、クローン時間の短縮がビルド全体の高速化に直結します。
# 最速のクローン(最新コミットのみ、単一ブランチ)
git clone --depth 1 --single-branch -b $BRANCH $REPO_URLこの設定で、数GBあるリポジトリでも数秒でクローンできるようになります。履歴が必要ない場合はTreeless cloneも有効です。
# Treeless clone(CI/CD向け)
git clone --filter=tree:0 https://github.com/user/repo.gitさらに、GitHub ActionsやGitLab CIでは、ランナー間でキャッシュを共有することで2回目以降のクローンを高速化できます。
よくある質問
浅いクローンを後から完全なクローンに変換できますか?
はい、git fetch --unshallowコマンドで完全な履歴を取得できます。ただし、この操作には時間がかかる場合があります。
クローンしたリポジトリのリモートURLを変更するには?
git remote set-url origin <新しいURL>で変更できます。HTTPSからSSHに切り替える場合などに使います。
特定のディレクトリだけをクローンできますか?
Gitの標準機能では特定ディレクトリだけをクローンすることはできませんが、スパースチェックアウトを使うと、クローン後に特定のディレクトリだけをチェックアウトできます。
まとめ
git cloneはGitを使った開発の出発点となる重要なコマンドです。基本的な使い方はシンプルですが、--depthや--filterオプションを活用することで、クローン時間を大幅に短縮できます。SSH認証の設定やよくあるエラーへの対処法も押さえておくと、スムーズに開発を始められます。
次のステップとして、クローンしたリポジトリでブランチを作成し、実際にコードを変更してコミット、プッシュする流れを練習してみてください。



