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 チュートリアル: リポジトリと作業ディレクトリのコラボレーション Git チュートリアル: リポジトリ間コラボレーション

もちろん、特定の Git リポジトリに特別な意味を与えることも可能です。たとえば、単に Git リポジトリを「中央」リポジトリとして指定すれば、Git を使用して一元化されたワークフローを複製できます。ポイントは、VCS 自体の機能を使っているのではなく、規則を通して実行しているという点です。

使用法

当初 git clone は、別の場所の新しいディレクトリにクローンやコピーを作成する目的で既存のリポジトリを指定するために使われていました。元となるリポジトリには、ローカルのファイルシステム、またはサポートされるプロトコルでアクセス可能なリモートマシンに存在するものを使用できます。git clone コマンドは、既存の Git リポジトリをコピーします。これは SVN のチェックアウトに似ていますが、「作業コピー」自体が完全な Git リポジトリである点が異なっています。独自の履歴を持ち、ファイルを自己管理する、元のリポジトリから完全に独立した環境です。

ユーザーの便宜のため、クローン作成を行うと、元のリポジトリを指す「origin」という名称のリモート接続が自動的に作成されます。これにより、中央リポジトリとの通信がきわめて簡単になります。この自動接続は、refs/remotes/origin にあるリモートブランチの HEAD への Git 参照を作成し、構成変数の remote.origin.urlremote.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>

Clone the repository located at <repo> into the folder called ~<directory>! on the local machine.

特定のタグのクローンを作成する

git clone --branch <tag> <repo>

Clone the repository located at <repo> and only clone the ref for <tag>.

shallow clone

git clone -depth=1 <repo>

Clone the repository located at <repo> and only clone the
history of commits specified by the option depth=1. In this example a clone of <repo> is made and only the most recent commit is included in the new cloned Repo. Shallow cloning is most useful when working with repos that have an extensive commit history. An extensive commit history may cause scaling problems such as disk space usage limits and long wait times when cloning. A Shallow clone can help alleviate these scaling issues.

構成オプション

git clone -branch

-branch 引数を使うと、リモートの HEAD が指すブランチ (通常は master ブランチ) の代わりに、クローンを作成する特定のブランチを指定できます。また、ブランチの代わりにタグを渡しても同じ操作が可能です。

git clone -branch new_feature git://remoterepository.git

上の例では、リモートの Git リポジトリから new_feature ブランチのみがクローン作成されます。これは、純粋にリポジトリの HEAD 参照をダウンロードする時間を節約するためだけのユーティリティです。後で必要な参照をさらにフェッチする必要があります。

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>

Clones the repo at <repo location> and applies the template from <template directory> to the newly created local branch. A thorough refrence on Git templates can be found on our git init page.

Git URL

Git では独自の URL 構文を使用して、リモート リポジトリの場所を Git コマンドに渡します。リモート リポジトリで git clone が最もよく使われているため、ここでは Git URL 構文について説明します。

Git URL プロトコル

- SSH

Secure Shell (SSH) は、ほとんどのサーバーで一般的に既定で構成されている、ユビキタス認証ネットワーク プロトコルです。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 の実例も取り上げています。

Git を学習する準備はできていますか?

この対話式チュートリアルを利用しましょう。

今すぐ始める