Git チュートリアル - git clone
ここでは、git clone
コマンドについて詳しく説明します。git clone
は、既存のリポジトリをターゲットとして使用する Git コマンドラインユーティリティで、ターゲットリポジトリのクローンまたはコピーを作成します。このページでは、git clone
コマンドの拡張構成オプションと使用例について説明します。ここで取り上げる主なポイントは、以下のとおりです。
- ローカルまたはリモートリポジトリのクローン作成
- ベアリポジトリのクローン作成
- shallow オプションを使った、リポジトリの部分的なクローン作成
- Git URL 構文とサポート対象のプロトコル
リポジトリのセットアップガイドでは、git clone
の基本的な使用例を取り上げました。このページでは、さらに複雑なクローン作成や構成のシナリオを学びます。
目的: リポジトリ間コラボレーションにおける開発コピー
プロジェクトの中央リポジトリが既に作成されている場合、ユーザーがローカルの開発コピーを取得する最も一般的な方法は git clone
コマンドを使用することです。git init
同様、クローン作成も通常は 1 回限りの操作です。開発者がいったん作業コピーを取得すると、すべてのバージョンの管理操作とコラボレーションがそのローカルリポジトリを経由して管理されます。
リポジトリ間コラボレーション
Git における「作業コピー」は、SVN リポジトリからコードをチェック アウトして得られる作業コピーとは大きく異なる概念であることを理解してください。SVN とは異なり、Git では作業コピーと中央リポジトリとの間に実質的な相違はなく、両者とも完全な Git リポジトリです。
Git を使ったコラボレーションと SVN を使ったコラボレーションは、この点で根本的に異なります。SVN は中央リポジトリと作業コピーの間の関係に依存しますが、Git のコラボレーションモデルはリポジトリ間の相互作用に基づきます。SVN の中央リポジトリに作業コピーをチェックインする代わりに、あるリポジトリから別のリポジトリへ、コミットをプッシュまたはプルします。
関連資料
Git Branch コマンド
ソリューションを見る
Bitbucket Cloud での Git の使用方法についてのチュートリアルです。
もちろん、特定の Git リポジトリに特別な意味を与えることも可能です。たとえば、単に Git リポジトリを「中央」リポジトリとして指定すれば、Git を使用して一元化されたワークフローを複製できます。ポイントは、VCS 自体の機能を使っているのではなく、規則を通して実行しているという点です。
使用法
当初 git clone
は、別の場所の新しいディレクトリにクローンやコピーを作成する目的で既存のリポジトリを指定するために使われていました。元となるリポジトリには、ローカルのファイルシステム、またはサポートされるプロトコルでアクセス可能なリモートマシンに存在するものを使用できます。git clone
コマンドは、既存の Git リポジトリをコピーします。これは SVN のチェックアウトに似ていますが、「作業コピー」自体が完全な Git リポジトリである点が異なっています。独自の履歴を持ち、ファイルを自己管理する、元のリポジトリから完全に独立した環境です。
ユーザーの便宜のため、クローン作成を行うと、元のリポジトリを指す「origin」という名称のリモート接続が自動的に作成されます。これにより、中央リポジトリとの通信がきわめて簡単になります。この自動接続は、refs/remotes/origin
にあるリモートブランチの HEAD への Git 参照を作成し、構成変数の remote.origin.url
と remote.origin.fetch
を初期化することで確立されます。
git clone
の使用例は、リポジトリセットアップガイドに記載されています。以下の例は、SSH ユーザー名 john を使用して、サーバー example.com
に格納された中央リポジトリのローカルコピーを取得する方法を示しています。
git clone ssh://john@example.com/path/to/my-project.git
cd my-project
# Start working on the project
最初のコマンドでは、ローカルマシーンの my-project
フォルダーにある新規 Git リポジトリを初期化し、中央リポジトリのコンテンツを取り込みます。次に、プロジェクト内へ移動して、ファイルの編集、スナップショットのコミット、他のリポジトリとの通信などを開始できるようにします。なお、クローン作成されるリポジトリに .git
という拡張子が付いていないことに留意してください。これは、ローカルコピーの状態がノンベアであることを意味します。
特定のフォルダーにクローンを作成する
git clone <repo> <directory>
<repo>
にあるリポジトリのクローンを、ローカル マシン上の ~<directory>!
という名前のフォルダーに作成します。
特定のタグのクローンを作成する
git clone --branch <tag> <repo>
<repo>
にあるリポジトリの、<tag>
を参照するクローンのみを作成します。
shallow clone
git clone -depth=1 <repo>
<repo>
にあるリポジトリの、オプション depth=1 で指定した コミット履歴のクローンのみを作成します。この例では、<repo>
のクローンが作成されます。新たにクローン作成されるリポジトリには、前回実行されたコミットのみが含まれます。shallow clone は、大量のコミット履歴があるリポジトリを使っている場合に最適です。大量のコミット履歴は、クローン作成に際し、ディスク領域の容量制限や長い待ち時間など、拡張の問題を引き起こす可能性があります。shallow clone は、こうした拡張に関する問題を軽減できます。
構成オプション
git clone -branch
-branch
引数を使用すると、リモートの HEAD
が指すブランチ (通常は main ブランチ) の代わりに、クローンを作成する特定のブランチを指定できます。また、ブランチの代わりにタグを渡しても同じ操作が可能です。
git clone --branch
git clone -mirror 対 git clone -bare
git clone --bare
git init --bare
と同様に、-bare
引数を git clone
に渡すと、省略された作業ディレクトリにリモートリポジトリのコピーが作成されます。つまり、プロジェクトの履歴を持つリポジトリが作成されます。このリポジトリでは、プッシュやプルは可能ですが、直接編集することはできません。また、このリポジトリのリモートブランチは、-bare
リポジトリでは構成されません。git init --bare
のように、開発者が直接編集できない、ホストされたリポジトリを作成するために使用します。
git clone --mirror
--mirror
引数を渡すと、--bare
引数も暗黙的に渡されます。つまり、--mirror
を指定すると、--bare
動作も継承されます。その結果、編集可能な作業ファイルを持たないベアリポジトリが作成されます。また、--mirror
は、リモートリポジトリの拡張参照をすべてクローン作成し、リモートブランチの構成追跡を維持します。その後ミラーで git remote update
を実行すると、元のリポジトリの参照がすべて上書きされます。完全に「ミラー」化された機能を提供します。
その他の構成オプション
その他すべての git clone オプションについては、Git 公式ドキュメントをご覧ください。このドキュメントでは、その他の一般的なオプションをいくつかご紹介します。
git clone --template
git clone --template=<template_directory> <repo location>
<repo location>
にあるリポジトリをクローンして、新規作成されたローカル・ブランチに <template directory>
のテンプレートを適用します。Git テンプレートの完全な参照については、「git init」ページをご参照ください。
Git URL
Git では独自の URL 構文を使用して、リモート・リポジトリの場所を Git コマンドに渡します。git clone
はリモート・リポジトリで最もよく使われているため、ここでは Git URL 構文について説明します。
Git URL プロトコル
'-SSH
SSH(Secure Shell)は、ほとんどのサーバーで一般的に既定で構成されている、ユビキタス認証ネットワーク・プロトコルです。SSH は認証プロトコルであるため、接続前にホスト・サーバーから認証情報の証明を受ける必要があります。ssh://[user@]host.xz[:port]/path/to/repo.git/
'- GIT
Git 独自のプロトコルです。Git は、ポート(9418)で実行するデーモンを使用します。このプロトコルは SSH に似ていますが、認証はありません。git://host.xz[:port]/path/to/repo.git/
'- HTTP
ハイパー・テキスト・トランスファー・プロトコルです。この Web 用のプロトコルは、インターネットを介した Web ページの HTML データの転送に最もよく使われます。Git では、HTTP http[s]://host.xz[:port]/path/to/repo.git/
を介して通信するよう構成できます。
要約
このドキュメントでは、git clone
について詳しく見てきました。最も重要なポイントは、以下のとおりです。
1. git clone
は、ターゲットリポジトリのコピーを作成するために使用する。
2. ターゲットリポジトリは、ローカルでもリモートでもかまわない。
3. Git は、リモートリポジトリにアクセスするためのネットワークプロトコルを複数サポートしている。
4. クローンのコンテンツを変更できる、多数の異なる構成オプションが用意されています。
git clone
機能のさらに詳しいリファレンスについては、Git 公式ドキュメントをご覧ください。また、リポジトリのセットアップガイドでは、git clone の実例も取り上げています。
この記事を共有する
次のトピック
おすすめコンテンツ
次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。