コマンド名
「git-clone」:リポジトリを新しいディレクトリに複製
概要
git clone [--template=<template_directory>] [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror] [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>] [--dissociate] [--separate-git-dir <git dir>] [--depth <depth>] [--[no-]single-branch] [--no-tags] [--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules] [--[no-]remote-submodules] [--jobs <n>] [--sparse] [--filter=<filter>] [--] <repository> [<directory>]
説明
リポジトリを新しく作成したディレクトリに複製し、クローンリポジトリ内の各ブランチにリモート追跡ブランチを作成し(git branch --remotes
を使用して表示)、クローンリポジトリの現在アクティブなブランチからフォークされた初期ブランチを作成、チェックアウトします。
クローン作成後、引数のないプレーンなgit fetch
はすべてのリモート追跡ブランチを更新し、加えて引数のないgit pull
はリモートマスターブランチを現在のマスターブランチにマージします(ただし、”–single-branch”の場合、これには当てはまりません。以下参照)。
このデフォルト設定はrefs/remotes/origin
の下にリモートブランチヘッドへの参照を作成し、remote.origin.url
およびremote.origin.fetch
設定変数を初期化することによって実行されます
オプション
-l
--local
--local
クローンを作成するリポジトリがローカルマシン上にある場合、このフラグは通常の「Git aware」転送メカニズムをバイパスして、ヘッドやオブジェクトとrefsディレクトリの下にあるすべてをコピーすることによってリポジトリをクローンします。.git/objects/
ディレクトリの下のファイルは可能な場合、スペースの節約のためにハードリンクされます。
リポジトリがローカルパス(例えば、/path/to/repo、等)として指定されている場合、それはデフォルトであり、-localは基本的には無処理となります。リポジトリがURLとして指定されている場合、このフラグは無視されます(ローカル最適化は使用されません)。--no-local
を指定すると、/path/to/repo
が指定されたときにデフォルトが上書きされ、その代わりに通常のGitトランスポートが使用されます。
--no-hardlinks
ハードリンクを使用する代わりに、ローカルファイルシステムのリポジトリからクローンプロセスを実行させ、.git/objects
ディレクトリの下のファイルをコピーします。リポジトリのバックアップを作成しようとしている場合、好ましいでしょう。
-s
--shared
--shared
クローンを作成するリポジトリがローカルマシン上にある場合、ハードリンクを使用する代わり、オブジェクトをソースリポジトリと共有するため、.git/objects/info/alternates
を自動的に設定します。 結果としてのリポジトリは当該オブジェクトなしで開始されます。
注記:以下は危険なオペレーションとなる可能性があります。それが何をするのかを理解しない限り、使用しないでください。当該オプションを使用してリポジトリをクローンし、そしてソースリポジトリ内のブランチを削除すると(または既存のコミットを参照しないようにする他のGitコマンドを使用すると)、一部のオブジェクトが参照されなくなる(もしくはダングリングされなくなる)可能性があります。これらのオブジェクトは自動的にgit gc --auto
を呼び出す通常のGitオペレーション( git commit
など)によって削除できます( git-gc[1]を参照してください)。これらのオブジェクトが削除され、クローンリポジトリによって参照された場合、クローンリポジトリは破損します。
--shared
でクローンリポジトリの--local
オプションなしでgit repack
を実行すると、オブジェクトがソースリポジトリからクローンリポジトリのパックにコピーされ、clone --shared
によるディスクスペースの節約がなくなります。ただし、デフォルトで--local
オプションを使用する git gc
を実行する場合は安全です。
--shared
でクローンリポジトリのソースリポジトリへの依存を解消したい場合、git repack -a
を実行するだけですべてのオブジェクトをソースリポジトリからクローンリポジトリのパックにコピーすることができます。
--reference[-if-able] <repository>
参照リポジトリがローカルマシン上にある場合、参照リポジトリからオブジェクトを取得するために.git/objects/info/alternates
を自動的に設定します。既存のリポジトリを代替として使用する場合、クローンリポジトリからコピーする必要のあるオブジェクトが少なくなり、ネットワークとローカルのストレージコストが削減されます。--reference-if-able
を使用場合、クローンを中止する代わりに、存在しないディレクトリがスキップされ、警告が表示されます。
注記:--shared
および --dissociate
オプションの注記を参照してください。
--dissociate
ネットワーク転送を減らすための--reference
オプションで指定された参照リポジトリからオブジェクトを借用し、借用したオブジェクトの必要なローカルコピーを作成してクローンした後、オブジェクトからの借用を停止します。このオプションは別のリポジトリからオブジェクトを既に借用しているリポジトリからローカルでクローンする場合にも使用できます。新しいリポジトリは同じリポジトリからオブジェクトを借用し、このオプションを使用して借用を停止できます。
-q
--quiet
--quiet
静かに(メッセージを減らす)オペレーションします。進行状況は標準エラーストリームに報告されません。
-v
--verbose
--verbose
長々と(メッセージを増やす)実行します。標準エラーストリームへの進行状況のレポートには影響を及ぼしません。
--progress
--quiet
が指定されていない限り、端末に接続されている場合、進捗状況はデフォルトで標準エラーストリームに報告されるようになっています。このフラグは標準エラーストリームが端末に送信されていない場合においても進行状況をレポートします。
--server-option=<option>
プロトコルバージョン2を使用して通信する場合、指定された文字列をサーバーに送信します。指定された文字列にはNULまたはLF文字を含めることはできません。不明なオプションを含むサーバーオプションの処理はサーバー固有です。複数の--server-option=<option>
が指定されている場合、それらはすべてコマンドラインにリストされている順で送信されます。
-n
--no-checkout
--no-checkout
クローン完了後、ヘッドのチェックアウトは実行されません。
--bare
ベアGitリポジトリを作成します。つまりdirectory>
を作成して管理ファイルを<directory>/.git
に置く代わりに、<directory>
自体を$GIT_DIR
にします。ワークツリーをチェックアウトする場所がないため、これは明らかに--no-checkout
を意味します。またリモートのブランチヘッドは refs/remotes/origin/
にマッピングされず、対応するローカルブランチヘッドに直接コピーされます。このオプションを使用すると、リモート追跡ブランチも関連する設定変数も作成されないことになります。
--sparse
スパースチェックアウトファイルを初期化し、ワークディレクトリがリポジトリのルートにあるファイルのみで開始されるようになります。スパースチェックアウトファイルは必要に応じてワークディレクトリを拡張するように変更することができます。
--filter=<filter-spec>
部分クローン機能を使用し、サーバーが特定のオブジェクトフィルターに従ってリーチ可能なオブジェクトのサブセットを送信するように要求します。--filter
を使用する場合、提供された<filter-spec>
が部分クローンフィルターに使用されます。例えば、--filter=blob:none
はGitで必要になるまで、すべてのBLOB(ファイルの内容)を除外します。また--filter=blob:limit=<size>
は少なくとも<size>
のサイズのすべてのブロブを除外します。フィルタ仕様の詳細についてはgit-rev-list[1]の–filterオプションを参照してください。
--mirror
ソースリポジトリのミラーを設定します。これは--bare
を意味します。--bare
と比較し、--mirror
はソースのローカルブランチをターゲットのローカルブランチにマップするだけでなく、すべての参照(リモート追跡ブランチ、ノートなどを含む)をマップし、これらすべての参照が次のように参照スペック設定をセットアップします。これらは ターゲットリポジトリ内のgit remote update
によって上書きされます。
-o <name>
--origin <name>
--origin <name>
リモート名のorigin
を使用してアップストリームリポジトリを追跡する代わりに、<name>
を使用します。
-b <name>
--branch <name>
--branch <name>
新しく作成したヘッドをクローンリポジトリのヘッドが示すブランチに示す代わりに、<name>
ブランチを示します。ベアでないリポジトリではこれはチェックアウトされるブランチのことです。--branch
はタグを取得し、結果のリポジトリでそのコミット時にヘッドを切り離すこともできます。
-u <upload-pack>
--upload-pack <upload-pack>
--upload-pack <upload-pack>
指定され、クローン元のリポジトリがssh経由でアクセスされる時、もう一方で実行されるコマンドのデフォルトではないパスを指定します。
--template=<template_directory>
テンプレートが使用されるディレクトリを指定します(git-init[1]の「テンプレートディレクトリ」セクションを参照してください)。
-c <key>=<value>
--config <key>=<value>
--config <key>=<value>
新しく作成されたリポジトリに設定変数を設定します。これはリポジトリが初期化された直後、かつリモート履歴がフェッチされる前もしくはファイルがチェックアウトされる前に有効になります。キーはgit-config[1]のものと同じ形式です(例えば、core.eol=true
)。同じキーに複数の値が指定されている場合、各値は設定ファイルに書き込まれます。これにより例えば、元のリモートにフェッチ参照スペックをを追加しても安全です。
現在の実行制限により、一部の設定変数は最初のフェッチとチェックアウトが完了するまで有効になりません。有効にならないことがわかっている設定変数は、remote.<name>.mirror
およびremote.<name>.tagOpt
です。代わりに対応する --mirror
および--no-tags
オプションを使用してください。
--depth <depth>
指定されたコミット数に切り捨てられた履歴を持ったシャロークローンを作成します。すべてのブランチの末端近くの履歴をフェッチするために--single-branch
が指定されていない限り、 --single-branch
を意味するものとします。サイズの小さいサブモジュールをクローンする場合、--shallow-submodules
もパスします。
--shallow-since=<date>
指定した時間以降に履歴を持つシャロ―クローンを作成します。
--shallow-exclude=<revision>
指定されたリモートブランチまたはタグからリーチ可能なコミットを除き、履歴を持つシャロ―クローンを作成します。このオプションは複数回指定可能となっています。
--[no-]single-branch
--branch
オプションで指定された、またはリモートのHEAD
が指すプライマリーブランチのいずれかにおいて、シングルブランチの末端につながる履歴のみをクローンします。結果のリポジトリにさらにフェッチすると、このオプションが最初のクローンで使用されたブランチのリモート追跡ブランチのみが更新されます--single-branch
がクローンされた時、リモートのヘッドがどのブランチも示していない場合、リモート追跡ブランチは作成されません。
--no-tags
タグをクローンせず、設定のremote.<remote>.tagOpt=--no-tags
をセットし、今後のgit pull
およびgit fetch
オペレーションがタグに従わないようにします。それに続く明示的なタグフェッチは引き続き機能します(git-fetch[1]を参照)。
--single-branch
と組み合わせて使用すると、シングルでクローンされたブランチ以外の参照なしでブランチをクローンおよび維持できます。これは便利であり、例えば、検索インデックス用の一部のリポジトリのデフォルトブランチの最小限のクローンを維持する場合などに便利です。
--recurse-submodules[=<pathspec>]
クローンが作成されたら、提供されたパススペックに基づいてサブモジュールを初期化し、クローンを作成します。パススペックが指定されていない場合、すべてのサブモジュールが初期化され、クローンされます。このオプションは複数のエントリで構成されるパススペックに対して複数回指定できます。作成されたクローンはパススペックが指定されていない場合、submodule.active
が指定されたパススペックまたは「.」に設定されています(すべてのサブモジュールを意味します)。
サブモジュールはデフォルト設定を使用して初期化およびクローンされます。これはクローンが終了した直後にgit submodule update --init --recursive <pathspec>
を実行するのと同じです。クローンリポジトリにワークツリーもしくはチェックアウトがない場合(つまり、--no-checkout/-n
、--bare
、もしくは--mirror
のいずれかが指定されている場合)、このオプションは無視されます。
--[no-]shallow-submodules
クローンされたすべてのサブモジュールは深さ1のシャロ―となります。
--[no-]remote-submodules
クローンされるすべてのサブモジュールはスーパープロジェクトの記録されたSHA-1ではなく、サブモジュールのリモート追跡ブランチのステータスを使用してサブモジュールを更新します。--remote
をgit submodule update
にパスするのと同じです。
--separate-git-dir=<git dir>
クローンリポジトリを本来あるべき場所に置く代わりに、クローンリポジトリを指定されたディレクトリに置き、そこにファイルシステムに依存しないGitシンボリックリンクを作成します。その結果、Gitリポジトリをワークツリーから分離することができます。
-j <n>
--jobs <n>
--jobs <n>
同時にフェッチされたサブモジュールの数。デフォルトとしてはsubmodule.fetchJobs
オプションです。
<repository>
クローンを作成する(場合によってはリモートの)リポジトリ。指定のリポジトリの詳細については以下の「GIT URLS」セクションを参照してください。
<directory>
クローンを作成する新しいディレクトリの名前。ディレクトリが明示的に指定されていない場合、ソースリポジトリの「humanish」の部分が使用されます(/path/to/repo.git
の場合はrepo
、host.xz:foo/.git
の場合はfoo
)。既存のディレクトリへのクローンの作成はディレクトリが空の場合にのみ許可されます。
GITの URL
一般的にURLにはトランスポートプロトコル、リモートサーバーのアドレス、およびリポジトリへのパスに関する情報が含まれています。トランスポートプロトコルによってはこの情報の一部が欠落している場合があります。
Gitはssh、git、http、およびhttpsプロトコルをサポートしています(さらに、ftpおよびftpsをフェッチに使用できますが、これは非効率的であり推奨していません。使用しないでください)。
ネイティブトランスポート(つまりgit:// URL)は認証を行わないため、セキュリティで保護されていないネットワークでは注意して使用する必要があります。
次のシンタックスを使用できます。
- ssh://[user@]host.xz[:port]/path/to/repo.git/
- git://host.xz[:port]/path/to/repo.git/
- http[s]://host.xz[:port]/path/to/repo.git/
- ftp[s]://host.xz[:port]/path/to/repo.git/
代替scpのようなシンタックスもsshプロトコルで使用できます。
- [user@]host.xz:path/to/repo.git/
このシンタックスは最初のコロンの前にスラッシュがない場合にのみ認識されます。これはコロンを含むローカルパスを区別するのに役立ちます。例えば、ローカルパスfoo:bar
を絶対パスまたは./foo:bar
として指定し、ssh urlとして誤って解釈されないようにすることができます。
sshおよびgitプロトコルはさらにユーザーネームの拡張をサポートします。
- ssh://[user@]host.xz[:port]/~[user]/path/to/repo.git/
- git://host.xz[:port]/~[user]/path/to/repo.git/
- [user@]host.xz:/~[user]/path/to/repo.git/
Gitにサポートされているローカルリポジトリの場合、次のシンタックスを使用できます。
- /path/to/repo.git/
- file:///path/to/repo.git/
これらの2つのシンタックスは前者が–localオプションを意味していることを除き、ほとんど同じです。
git push 以外のgit clone、git fetch、git pullは適切なバンドルファイルも受け入れます。git-bundle[1].を参照してください。
Gitが特定のトランスポートプロトコルの処理方法を知らない場合、remote- <transport>のリモートヘルパー(存在する場合)を使用しようとします。リモートヘルパーを明示的に要求するには次のシンタックスを使用できます。
- <transport>::<address>
ここでの<address>とはパス、サーバーとパス、または呼び出される特定のリモートヘルパーによって認識される任意のURLのような文字列です。詳細についてはgitremote-helpers[7] を参照してください。
同様の名前のリモートリポジトリが多数あり、それらに異なる形式を使用する場合(使用するURLが機能するURLに書き換えられるように)、次の形式の設定セクションを作成することができます。
[url "<actual url base>"] insteadOf = <other url base>
例えば、以下のように使用します。
[url "git://git.host.xz/"] insteadOf = host.xz:/path/to/ insteadOf = work:
「work:repo.git」や「host.xz:/path/to/repo.git」のようなURLはURLが「git://git.host.xz/repo.git」になるコンテキストで書き換えられます。
プッシュ専用のURLを書き換えたい場合、次の形式の設定セクションを作成できます。
[url "<actual url base>"] pushInsteadOf = <other url base>
例えば、以下のように使用します。
[url "ssh://example.org/"] pushInsteadOf = git://example.org/
「git://example.org/path/to/repo.git」のようなURLはプッシュの場合、「ssh://example.org/path/to/repo.git」に書き換えられますが、プルの場合は引き続き 元のURLとなります。
例
アップストリームからのクローン
$ git clone git://git.kernel.org/pub/scm/…/linux.git my-linux $ cd my-linux $ make
チェックアウトせず、現在のディレクトリから借用するローカルクローンを作成します。
$ git clone -l -s -n . ../copy $ cd ../copy $ git show-branch
既存のローカルディレクトリから借用しながら、アップストリームからクローンを作成します。
$ git clone --reference /git/linux.git \ git://git.kernel.org/pub/scm/…/linux.git \ my-linux $ cd my-linux
変更を公開するためのベアリポジトリを作成します。
$ git clone --bare -l /home/proj/.git /pub/scm/proj.git
GIT
git[1]パッケージソフトの一部