Git

git clone is a command that duplicates an entire remote Git repository, including its commit history and branch information, into your local environment.

git clone

はじめに

Gitは、ソフトウェア開発で広く使われている分散型バージョン管理システムです。Gitを利用することで、複数人でのコード共有・履歴管理・共同開発が効率的に行えます。その中でも「git clone」コマンドは、リポジトリを複製して自分の手元(ローカル環境)に取得するうえで最初に使われる最重要コマンドの一つです。

はじめてGitを触る方にとっては、「そもそもclone(クローン)とは何か?」という疑問があるかもしれません。クローンとは、リモート上にあるGitリポジトリの完全なコピーを自分のローカルに作ることを指します。このコピーには、単に最新のソースコードだけではなく、過去のコミット履歴やブランチ、タグなどの情報も含まれるため、チーム開発やバージョン管理を効率的に行えるようになります。

git cloneとは?

リポジトリの複製

「git clone」は、リモート(またはローカルにある別ディレクトリ)のリポジトリを丸ごと複製し、ローカル環境に作成するコマンドです。Gitではリポジトリ内部に「.git」というディレクトリ(隠しディレクトリ)があり、このディレクトリにコミット履歴やブランチ、タグなどのあらゆる情報が格納されています。「git clone」を実行すると、リモートリポジトリからこれらのデータがローカル側にダウンロードされます。

リモートリポジトリURLの種類

「git clone」は、リモートリポジトリのURLを指定して実行することが多いです。このURLの形式にはいくつか種類があります。

HTTPS

Git Bash

git clone https://github.com/ユーザー名/リポジトリ名.git
  • 一般的で最も多く使用されるプロトコル。ファイアウォールなどの制限がある場合でも通しやすい。
  • 認証が必要な場合がある(GitHubなどではパスワードではなく、Personal Access Token(PAT)やSSO等を求められることが多い)。
SSH

Git Bash

git clone [email protected]:ユーザー名/リポジトリ名.git
  • 公開鍵/秘密鍵を使用するため、安全性や利便性が高い。
  • 初回設定はやや手間だが、一度SSHキーをセットアップすると毎回パスワード入力なしで操作できる。
Gitプロトコル

Git Bash

git clone git://サーバー/ユーザー名/リポジトリ名.git
  • 暗号化されないためセキュリティ上の制約が大きく、ホスティングサービス側で無効化されていることも多い。速度面のメリットよりも、利用可否や安全性が先に問題になりやすい。
  • 一般的にはあまり使われない。
ローカルパス

Git Bash

git clone /path/to/local/repository
  • 同じマシン内にある既存リポジトリを複製する際に便利。
  • リモートとして追加する必要がない、もしくは一時的に別の場所で作業するときなどに使用。

基本的な使い方

最もシンプルな例

Git Bash

git clone <リポジトリURL>

これだけで、リポジトリの内容がカレントディレクトリ内に新しいフォルダとして作成されます。新しいフォルダ名は通常、リポジトリ名と同じになります(GitHubなら「リポジトリ名」ディレクトリ)。

例:

Git Bash

git clone https://github.com/example-user/example-repo.git

実行すると、example-repo というフォルダが作成され、その中にソースコードや履歴情報(.git ディレクトリ)が格納されます。

フォルダ名を指定する方法

クローン時に生成されるディレクトリ名を自分で指定することもできます。最後の引数に任意のディレクトリ名を加えるだけです。

Git Bash

git clone https://github.com/example-user/example-repo.git 任意のフォルダ名

例:

Git Bash

git clone https://github.com/example-user/example-repo.git my-project

実行すると、my-project という名前のディレクトリにクローンされます。

SSHキーを利用する例

GitHubやGitLabなどにSSHキーを登録している場合は、以下のようにSSH形式のURLを使用します。

Git Bash

git clone [email protected]:example-user/example-repo.git

公開鍵(id_rsa.pubなど)をあらかじめGitHubアカウントなどに登録しておけば、毎回パスワードを入力せずにクローンできます。

クローン直後にまず確認する(3点セット)

クローンが成功したら、次の3つを確認すると「今どの状態か」が一気に分かります。

Git Bash

cd <クローンしたフォルダ>
git status
git remote -v

よく使われるオプションと応用的な使い方

初学者の方は基本的なクローンだけでも問題ありませんが、状況によってはクローン時のデータ量を減らしたい、特定のブランチだけ取得したい、ミラーとして運用したい、といったニーズがあります。以下に代表的なオプションと応用例をまとめます。

--depth

Git Bash

git clone --depth <深さ> <リポジトリURL>

例:

Git Bash

git clone --depth 1 https://github.com/example-user/example-repo.git

上記は最新コミットのみを取得するため、履歴が非常に軽量になります。

あとからフル履歴が必要になった場合は、次のコマンドで履歴を完全に取得できます。

Git Bash

git fetch --unshallow

--filter

Git Bash

git clone --filter=blob:none <リポジトリURL>

--single-branch

Git Bash

git clone --single-branch --branch <ブランチ名> <リポジトリURL>

例:

Git Bash

git clone --single-branch --branch develop https://github.com/example-user/example-repo.git

これで、develop ブランチのみをクローンし、初期チェックアウトも develop になります。

--branch

上記の例でも出てきましたが、--branch は特定のブランチやタグをチェックアウトする際に便利です。--single-branch と合わせて使わない場合でも、クローン後に自動的に指定したブランチをチェックアウトしてくれます。

Git Bash

git clone --branch <ブランチまたはタグ> <リポジトリURL>

--bare

Git Bash

git clone --bare <リポジトリURL>

--mirror

Git Bash

git clone --mirror <リポジトリURL>

--recurse-submodules

Git Bash

git clone --recurse-submodules <リポジトリURL>

トラブルシューティングとよくあるエラー

「Permission denied」エラー

SSHでクローンを実行する際に「Permission denied (publickey)」のエラーが表示される場合は、以下の原因が考えられます。

対処法としては、まずSSHキーの設定を確認しましょう。ssh -T [email protected]コマンドで接続テストが成功すれば、鍵は正しく設定されています。失敗する場合は、~/.ssh/configの設定や、GitHub/GitLabのSSH設定を見直します。

「SSL certificate problem」エラー

HTTPSでクローンを行う際、「SSL certificate problem」エラーが出る場合があります。企業や学校のプロキシ環境、独自証明書を使っている環境で起こりやすい問題です。対処法としては、グローバルでGitのSSL設定を変更したり、証明書の信頼をシステムに追加する、などが挙げられます。ただしセキュリティ上のリスクがあるため、運用ポリシーと相談のうえで設定しましょう。

なお、安易にSSL検証を無効化する設定は避け、まずは証明書を正しく信頼させる方向で対応するのが安全です。

「fatal: repository not found」エラー

URLが間違っている、またはアクセス権がない場合に発生します。リポジトリURLを確認したり、プライベートリポジトリであれば招待を受けているか、アクセス権限を持っているかをチェックしましょう。

「remote: Repository not found.」と表示される

「fatal: repository not found」と似ていますが、ホスティングサービス側でリポジトリが削除されたか、アクセス権が無いかの可能性が高いです。URLや所有権限を改めて確認してください。

ベストプラクティスと運用のヒント

初回クローンの高速化
大規模リポジトリの場合、履歴が非常に大きくなることがあります。開発中で最新のコミットしか必要ないなら、--depth 1--single-branchなどを使用して浅いクローンを行い、必要になったタイミングでフル履歴を取得するようにすると効率的です。
SSHキーを整備しておく
HTTPSよりSSHのほうが認証まわりの手間が少なくなります。複数のプライベートリポジトリにアクセスする場合は、SSHキーをセットアップしておくと便利です。
Forkしたリポジトリで作業する場合(origin / upstream)
GitHubでForkして作業する場合、クローン直後の origin は「自分のFork先」になっていることが多いです。 元の本家リポジトリも追いかけたい場合は、別名(慣習的に upstream)で追加します。

Git Bash

git remote add upstream <本家リポジトリURL>
git fetch upstream
「自分の変更は origin にpush」「本家の更新は upstream から取り込む」という役割分担にすると混乱しにくいです。
サブモジュールを扱う際の注意
サブモジュールを利用している場合、--recurse-submodulesを利用するとクローン後の手動ステップが減ります。サブモジュールの更新漏れやチェックアウトミスを防ぎたい方にはおすすめです。
ミラーの運用
リポジトリを丸ごとミラーしてバックアップとして保持したい場合は、--mirrorを使うと完全なコピーが作れます。その後、定期的に git fetch --allgit remote update を駆使してリモートの最新状態を同期することが可能です。

まとめ

以上が「git clone」コマンドに関する詳細な解説です。初学者の方はまずリポジトリをクローンし、ローカル環境で開発を始める最初のステップとして理解していただければと思います。中級者・上級者の方にとっては、深い履歴を取得しないためのオプションや、ブランチを限定して取得する方法、bareリポジトリの利用、ミラー運用など、プロジェクトの状況に応じて活用できる多くの機能が用意されていることがわかるでしょう。

Gitを使いこなすためには、クローンしたあとも「ブランチ管理」「マージ」「リベース」「リモート操作」など、さまざまなコマンドを組み合わせて活用していきます。まずは「git clone」によってリポジトリを複製するところから始めてみましょう。そして必要に応じて、紹介したオプションやトラブルシューティング手法を試していただければ幸いです。

皆様のGit活用がよりスムーズに、そして効率よく進むことを願っています。もし何か追加の疑問やトラブルがあれば、ぜひ調べてみたり、チームメンバーやコミュニティに質問してみてください。Gitはコミュニティも非常に活発ですので、きっと解決策が見つかるはずです。