git clone
is a command that duplicates an entire remote Git repository, including its commit history and branch information, into your local environment.
Gitは、ソフトウェア開発で広く使われている分散型バージョン管理システムです。Gitを利用することで、複数人でのコード共有・履歴管理・共同開発が効率的に行えます。その中でも「git clone」コマンドは、リポジトリを複製して自分の手元(ローカル環境)に取得するうえで最初に使われる最重要コマンドの一つです。
はじめてGitを触る方にとっては、「そもそもclone(クローン)とは何か?」という疑問があるかもしれません。クローンとは、リモート上にあるGitリポジトリの完全なコピーを自分のローカルに作ることを指します。このコピーには、単に最新のソースコードだけではなく、過去のコミット履歴やブランチ、タグなどの情報も含まれるため、チーム開発やバージョン管理を効率的に行えるようになります。
「git clone」は、リモート(またはローカルにある別ディレクトリ)のリポジトリを丸ごと複製し、ローカル環境に作成するコマンドです。Gitではリポジトリ内部に「.git」というディレクトリ(隠しディレクトリ)があり、このディレクトリにコミット履歴やブランチ、タグなどのあらゆる情報が格納されています。「git clone」を実行すると、リモートリポジトリからこれらのデータがローカル側にダウンロードされます。
「git clone」は、リモートリポジトリのURLを指定して実行することが多いです。このURLの形式にはいくつか種類があります。
Git Bash
git clone https://github.com/ユーザー名/リポジトリ名.git
Git Bash
git clone git@github.com:ユーザー名/リポジトリ名.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 という名前のディレクトリにクローンされます。
GitHubやGitLabなどにSSHキーを登録している場合は、以下のようにSSH形式のURLを使用します。
Git Bash
git clone git@github.com:example-user/example-repo.git
公開鍵(id_rsa.pubなど)をあらかじめGitHubアカウントなどに登録しておけば、毎回パスワードを入力せずにクローンできます。
初学者の方は基本的なクローンだけでも問題ありませんが、状況によってはクローン時のデータ量を減らしたい、特定のブランチだけ取得したい、ミラーとして運用したい、といったニーズがあります。以下に代表的なオプションと応用例をまとめます。
Git Bash
git clone --depth <深さ> <リポジトリURL>
例:
Git Bash
git clone --depth 1 https://github.com/example-user/example-repo.git
上記は最新コミットのみを取得するため、履歴が非常に軽量になります。
Git Bash
git clone --single-branch --branch <ブランチ名> <リポジトリURL>
--branch
オプションでクローンと同時にブランチをチェックアウトします。例:
Git Bash
git clone --single-branch --branch develop https://github.com/example-user/example-repo.git
これで、develop ブランチのみをクローンし、初期チェックアウトも develop になります。
上記の例でも出てきましたが、--branch
は特定のブランチやタグをチェックアウトする際に便利です。--single-branch
と合わせて使わない場合でも、クローン後に自動的に指定したブランチをチェックアウトしてくれます。
Git Bash
git clone --branch <ブランチまたはタグ> <リポジトリURL>
Git Bash
git clone --bare <リポジトリURL>
Git Bash
git clone --mirror <リポジトリURL>
--mirror
を使うとすべてのリモート参照がそのままコピーされます。--bare
と似ていますが、--mirror
はリモートリポジトリのすべてのリファレンス(ブランチやタグだけでなく、更新履歴のメタ情報)まで完全に同期させます。Git Bash
git clone --recurse-submodules <リポジトリURL>
git submodule update --init --recursive
を実行しなくても良いため便利です。SSHでクローンを実行する際に「Permission denied (publickey)」のエラーが表示される場合は、以下の原因が考えられます。
対処法としては、まずSSHキーの設定を確認しましょう。ssh -T git@github.com
コマンドで接続テストが成功すれば、鍵は正しく設定されています。失敗する場合は、~/.ssh/configの設定や、GitHub/GitLabのSSH設定を見直します。
HTTPSでクローンを行う際、「SSL certificate problem」エラーが出る場合があります。企業や学校のプロキシ環境、独自証明書を使っている環境で起こりやすい問題です。対処法としては、グローバルでGitのSSL設定を変更したり、証明書の信頼をシステムに追加する、などが挙げられます。ただしセキュリティ上のリスクがあるため、運用ポリシーと相談のうえで設定しましょう。
URLが間違っている、またはアクセス権がない場合に発生します。リポジトリURLを確認したり、プライベートリポジトリであれば招待を受けているか、アクセス権限を持っているかをチェックしましょう。
「fatal: repository not found」と似ていますが、ホスティングサービス側でリポジトリが削除されたか、アクセス権が無いかの可能性が高いです。URLや所有権限を改めて確認してください。
--depth 1
や--single-branch
などを使用して浅いクローンを行い、必要になったタイミングでフル履歴を取得するようにすると効率的です。--recurse-submodules
を利用するとクローン後の手動ステップが減ります。サブモジュールの更新漏れやチェックアウトミスを防ぎたい方にはおすすめです。--mirror
を使うと完全なコピーが作れます。その後、定期的に git fetch --all
や git remote update
を駆使してリモートの最新状態を同期することが可能です。以上が「git clone」コマンドに関する詳細な解説です。初学者の方はまずリポジトリをクローンし、ローカル環境で開発を始める最初のステップとして理解していただければと思います。中級者・上級者の方にとっては、深い履歴を取得しないためのオプションや、ブランチを限定して取得する方法、bareリポジトリの利用、ミラー運用など、プロジェクトの状況に応じて活用できる多くの機能が用意されていることがわかるでしょう。
Gitを使いこなすためには、クローンしたあとも「ブランチ管理」「マージ」「リベース」「リモート操作」など、さまざまなコマンドを組み合わせて活用していきます。まずは「git clone」によってリポジトリを複製するところから始めてみましょう。そして必要に応じて、紹介したオプションやトラブルシューティング手法を試していただければ幸いです。
皆様のGit活用がよりスムーズに、そして効率よく進むことを願っています。もし何か追加の疑問やトラブルがあれば、ぜひ調べてみたり、チームメンバーやコミュニティに質問してみてください。Gitはコミュニティも非常に活発ですので、きっと解決策が見つかるはずです。