Git
この記事では「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
- Table Of Contents
はじめに
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
git status:今いるブランチ名、変更ファイルの有無などが分かります。git remote -v:接続先(通常はorigin)のURLが分かります。HTTPS/SSHどちらでクローンしたかもここで確認できます。
よく使われるオプションと応用的な使い方
初学者の方は基本的なクローンだけでも問題ありませんが、状況によってはクローン時のデータ量を減らしたい、特定のブランチだけ取得したい、ミラーとして運用したい、といったニーズがあります。以下に代表的なオプションと応用例をまとめます。
--depth
Git Bash
git clone --depth <深さ> <リポジトリURL>
- 「shallow clone(浅いクローン)」とも呼ばれ、過去の全履歴を取得せずに指定した数のコミットだけをダウンロードします。
- 過去の履歴が巨大なリポジトリでは、ダウンロード時間やストレージを節約できる利点があります。
- ただし、過去のコミット履歴を一部しか持っていないため、過去のコミットを操作するようなコマンド(リベースやバイセクトなど)には制限があります。
例:
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>
- 「partial clone(部分クローン)」の一種で、ファイルの中身(blob)を必要になるまで取らないことで、初回のダウンロード量を減らせます。
- 巨大なリポジトリで「まずは履歴より作業開始を優先したい」場合に効きます。
- ただし、後からファイル内容が必要になったタイミングで追加ダウンロードが発生します。
--single-branch
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
上記の例でも出てきましたが、--branch は特定のブランチやタグをチェックアウトする際に便利です。--single-branch と合わせて使わない場合でも、クローン後に自動的に指定したブランチをチェックアウトしてくれます。
Git Bash
git clone --branch <ブランチまたはタグ> <リポジトリURL>
--bare
Git Bash
git clone --bare <リポジトリURL>
- ワーキングツリー(ソースコードが展開されるディレクトリ)がない、いわば「リポジトリのメタデータだけを持った状態」のクローンを作成します。
- 通常、リモートリポジトリとして運用される側はbareリポジトリです。ソースコードの実体(作業ツリー)は不要で、pushやfetchの受け皿として使われることが多いです。
- 作成されるディレクトリは通常の「.git」ディレクトリ相当の中身になります。慣習として、作成先ディレクトリ名を「something.git」にすることは多いですが、必須ではありません。
--mirror
Git Bash
git clone --mirror <リポジトリURL>
- リポジトリを完全にミラーリングします。通常のcloneではリモートリポジトリへの参照はoriginとして作成されますが、
--mirrorを使うとすべてのリモート参照がそのままコピーされます。 - リポジトリをバックアップしたい場合や、別サーバーに完全なミラーを作りたいときなどに有効です。
--bareと似ていますが、--mirrorはリモートリポジトリのすべてのリファレンス(ブランチやタグだけでなく、更新履歴のメタ情報)まで完全に同期させます。
--recurse-submodules
Git Bash
git clone --recurse-submodules <リポジトリURL>
- クローンと同時にサブモジュールもまとめてクローンしてくれます。
- サブモジュールを使用しているプロジェクトの場合、クローン後に手動で
git submodule update --init --recursiveを実行しなくても良いため便利です。
トラブルシューティングとよくあるエラー
「Permission denied」エラー
SSHでクローンを実行する際に「Permission denied (publickey)」のエラーが表示される場合は、以下の原因が考えられます。
- SSHキーがGitHub(あるいはGitLabなど)に正しく登録されていない
- 秘密鍵・公開鍵のパーミッションに問題がある
- コマンドを実行しているユーザーアカウントが異なる
対処法としては、まず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 upstreamoriginにpush」「本家の更新はupstreamから取り込む」という役割分担にすると混乱しにくいです。 - サブモジュールを扱う際の注意
- サブモジュールを利用している場合、
--recurse-submodulesを利用するとクローン後の手動ステップが減ります。サブモジュールの更新漏れやチェックアウトミスを防ぎたい方にはおすすめです。 - ミラーの運用
- リポジトリを丸ごとミラーしてバックアップとして保持したい場合は、
--mirrorを使うと完全なコピーが作れます。その後、定期的にgit fetch --allやgit remote updateを駆使してリモートの最新状態を同期することが可能です。
まとめ
以上が「git clone」コマンドに関する詳細な解説です。初学者の方はまずリポジトリをクローンし、ローカル環境で開発を始める最初のステップとして理解していただければと思います。中級者・上級者の方にとっては、深い履歴を取得しないためのオプションや、ブランチを限定して取得する方法、bareリポジトリの利用、ミラー運用など、プロジェクトの状況に応じて活用できる多くの機能が用意されていることがわかるでしょう。
Gitを使いこなすためには、クローンしたあとも「ブランチ管理」「マージ」「リベース」「リモート操作」など、さまざまなコマンドを組み合わせて活用していきます。まずは「git clone」によってリポジトリを複製するところから始めてみましょう。そして必要に応じて、紹介したオプションやトラブルシューティング手法を試していただければ幸いです。
皆様のGit活用がよりスムーズに、そして効率よく進むことを願っています。もし何か追加の疑問やトラブルがあれば、ぜひ調べてみたり、チームメンバーやコミュニティに質問してみてください。Gitはコミュニティも非常に活発ですので、きっと解決策が見つかるはずです。