git cloneとは?リポジトリを取得する基本コマンドを完全解説

「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-project

HTTPSとSSHのどちらを使うかは、認証方法の設定によって決まります。SSHキーを設定済みの場合はSSH形式が便利ですが、そうでなければHTTPSを使うのが一般的です。

URLフォーマット

git cloneは複数のプロトコルに対応しています。環境や要件に応じて適切なものを選びましょう。

SSH

git@github.com:username/repo.git
ssh://[user@]host[:port]/path/to/repo.git

SSHは一度キーを設定すれば、クローンやプッシュのたびにパスワードを入力する必要がありません。チーム開発では最も一般的な選択肢です。

HTTPS

https://github.com/username/repo.git
https://gitlab.com/username/repo.git

HTTPSはファイアウォール環境でも通常は利用可能です。ただし、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.git

CI/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.git

Blobless 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 false

RPC failed / Connection timed out

大きなリポジトリをクローンする際にタイムアウトが発生する場合があります。

# HTTPバッファサイズを増やす
git config --global http.postBuffer 524288000

# または浅いクローンを試す
git clone --depth 1 https://github.com/user/large-repo.git

UNPROTECTED PRIVATE KEY FILE

SSHキーのパーミッションが緩すぎる場合に発生します。

# 秘密鍵のパーミッションを600に設定
chmod 600 ~/.ssh/id_ed25519

git 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認証の設定やよくあるエラーへの対処法も押さえておくと、スムーズに開発を始められます。

次のステップとして、クローンしたリポジトリでブランチを作成し、実際にコードを変更してコミット、プッシュする流れを練習してみてください。

参考リンク

さらに深く学びたい方へ

この記事で紹介した技術をマスターするには、体系的な学習が重要です。独学で挫折しそうな方は、現役
エンジニアから直接学べるプログラミングスクールも検討してみてください。

現場で通用するスキルを身につけるなら

DMM WEBCAMPのカリキュラムは、実際の開発現場を想定したチーム開発も経験できます。ポートフォリオ制作
支援もあり、転職活動で差をつけられます。

未経験から4ヶ月でエンジニアとして活躍できるレベルまで成長可能です。

実務レベルのWeb開発スキルを習得するなら

RUNTEQは、1000時間の圧倒的学習量で、現場で即戦力となるWebエンジニアを育成します。Ruby on
Railsに特化し、実際のWebサービス開発を通じて実践力を養います。

卒業生の多くが自社開発企業への転職に成功している実績があります。

じっくり理解を深めたい方へ

この記事で紹介した内容を確実に身につけるには、分からない点をすぐに質問できる環境が重要です。CodeCa
mpなら、現役エンジニアとのマンツーマンレッスンで、あなたのペースで着実にスキルアップできます。

朝7時〜夜23時まで、365日受講可能なので、仕事や学業と両立しながら学習を進められます。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次