Git
English ▾ トピック ▾ 最新バージョン ▾ git-clone は2.47.0で最後に更新されました

名前

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] [--[no-]reject-shallow]
	  [--filter=<filter-spec>] [--also-filter-submodules]] [--] <repository>
	  [<directory>]

説明

リポジトリを新しく作成されたディレクトリにクローンし、クローンされたリポジトリの各ブランチのリモート追跡ブランチを作成し(git branch --remotesを使用して表示可能)、クローンされたリポジトリの現在アクティブなブランチからフォークされた初期ブランチを作成してチェックアウトします。

クローンを作成した後、引数のないプレーンなgit fetchはすべてのリモート追跡ブランチを更新し、引数のないgit pullは、リモートマスターブランチを現在のマスターブランチにマージします(存在する場合)。これは、--single-branchが指定されている場合は当てはまりません。以下を参照)。

このデフォルト構成は、refs/remotes/originの下にリモートブランチヘッドへの参照を作成し、remote.origin.urlおよびremote.origin.fetch構成変数を初期化することによって実現されます。

オプション

-l
--local

クローン元のレポジトリがローカルマシンにある場合、このフラグは通常の「Git対応」トランスポートメカニズムをバイパスし、HEADとobjectsおよびrefsディレクトリの下のすべてのコピーを作成することにより、レポジトリをクローンします。 .git/objects/ディレクトリの下のファイルは、可能な場合はスペースを節約するためにハードリンクされます。

リポジトリがローカルパス(例:/path/to/repo)として指定されている場合、これがデフォルトであり、--localは本質的にノーオペレーションです。リポジトリがURLとして指定されている場合、このフラグは無視されます(ローカルの最適化は使用されません)。 --no-localを指定すると、/path/to/repoが指定された場合のデフォルトがオーバーライドされ、代わりに通常のGitトランスポートが使用されます。

リポジトリの$GIT_DIR/objectsにシンボリックリンクがあるか、シンボリックリンクである場合、クローンは失敗します。これは、シンボリックリンクを逆参照することにより、ファイルが誤ってコピーされるのを防ぐためのセキュリティ対策です。

:この操作は、srcの変更中にcp -r src dstを実行するのと同様に、ソースリポジトリへの同時変更と競合する可能性があります。

--no-hardlinks

ローカルファイルシステム上のリポジトリからのクローン処理で、ハードリンクを使用する代わりに、.git/objectsディレクトリの下のファイルをコピーするように強制します。これは、リポジトリのバックアップを作成しようとしている場合に望ましい場合があります。

-s
--shared

クローンするリポジトリがローカルマシンにある場合、ハードリンクを使用する代わりに、.git/objects/info/alternatesを自動的に設定して、ソースリポジトリとオブジェクトを共有します。結果のリポジトリは、独自のオブジェクトなしで開始されます。

:これは危険な操作である可能性があります。それが何をするのか理解していない限り、使用しないでください。このオプションを使用してリポジトリをクローンし、ソースリポジトリでブランチを削除する(または既存のコミットを非参照にする他のGitコマンドを使用する)と、一部のオブジェクトが非参照(またはダングリング)になる可能性があります。これらのオブジェクトは、自動的にgit maintenance run --autoを呼び出す通常のGit操作(git commitなど)によって削除される場合があります。(git-maintenance[1]を参照してください。)これらのオブジェクトが削除され、クローンされたリポジトリによって参照されていた場合、クローンされたリポジトリは破損します。

--sharedでクローンされたリポジトリで--localオプションなしでgit repackを実行すると、ソースリポジトリからクローンされたリポジトリのパックにオブジェクトがコピーされ、clone --sharedのディスク容量の節約がなくなります。ただし、デフォルトで--localオプションを使用するgit gcを実行しても安全です。

--sharedでクローンされたリポジトリのソースリポジトリへの依存関係を解消したい場合は、git repack -aを実行して、ソースリポジトリからクローンされたリポジトリのパックにすべてのオブジェクトをコピーするだけです。

--reference[-if-able] <リポジトリ>

参照<リポジトリ>がローカルマシンにある場合、.git/objects/info/alternatesを自動的に設定して、参照<リポジトリ>からオブジェクトを取得します。既存のリポジトリを代替として使用すると、クローンされるリポジトリからコピーされるオブジェクトの数が少なくなり、ネットワークとローカルストレージのコストが削減されます。 --reference-if-ableを使用する場合、存在しないディレクトリは、クローンを中止する代わりに警告付きでスキップされます。

--sharedオプションの注記、および--dissociateオプションも参照してください。

--dissociate

--referenceオプションで指定された参照リポジトリからオブジェクトを借用してネットワーク転送のみを削減し、借用されたオブジェクトの必要なローカルコピーを作成することにより、クローンが作成された後に借用を停止します。このオプションは、すでに別のリポジトリからオブジェクトを借用しているリポジトリからローカルでクローンする場合にも使用できます。新しいリポジトリは同じリポジトリからオブジェクトを借用し、このオプションを使用して借用を停止できます。

-q
--quiet

静かに操作します。進行状況は標準エラーストリームに報告されません。

-v
--verbose

詳細に実行します。標準エラーストリームへの進行状況の報告には影響しません。

--progress

--quietが指定されていない限り、端末に接続されている場合、デフォルトで標準エラーストリームに進行状況が報告されます。このフラグは、標準エラーストリームが端末に向けられていない場合でも、進行状況を強制します。

--server-option=<オプション>

プロトコルバージョン2を使用して通信する場合、指定された文字列をサーバーに送信します。指定された文字列にNULまたはLF文字を含めることはできません。不明なものも含め、サーバーオプションのサーバー側の処理はサーバー固有です。複数の--server-option= <オプション>が指定されている場合、それらはすべてコマンドラインにリストされている順序で相手に送信されます。

-n
--no-checkout

クローンが完了した後、HEADのチェックアウトは実行されません。

--[no-]reject-shallow

ソースリポジトリがシャローリポジトリの場合、失敗します。 clone.rejectShallow構成変数を使用してデフォルトを指定できます。

--bare

ベア Git リポジトリを作成します。つまり、<directory> を作成して管理ファイルを <directory>`/.git` に配置する代わりに、<directory> 自身を $GIT_DIR にします。 作業ツリーをチェックアウトする場所がないため、これは明らかに --no-checkout を意味します。 また、リモートのブランチヘッドは、refs/remotes/origin/ にマッピングされることなく、対応するローカルブランチヘッドに直接コピーされます。 このオプションを使用すると、リモート追跡ブランチも関連する構成変数も作成されません。

--sparse

スパースチェックアウトを使用します。最初はトップレベルディレクトリ内のファイルのみが存在します。 git-sparse-checkout[1] コマンドを使用して、必要に応じて作業ディレクトリを拡張できます。

--filter=<フィルター指定>

部分クローン機能を使用し、指定されたオブジェクトフィルターに従って、到達可能なオブジェクトのサブセットを送信するようにサーバーに要求します。 --filter を使用する場合、指定された <フィルター指定> は部分クローンフィルターに使用されます。 たとえば、--filter=blob:none は、Git によって必要になるまで、すべての blob(ファイルの内容)を除外します。 また、--filter=blob:limit=<サイズ> は、少なくとも <サイズ> のサイズのすべての blob を除外します。 フィルター指定の詳細については、git-rev-list[1]--filter オプションを参照してください。

--also-filter-submodules

リポジトリ内のすべてのサブモジュールにも部分クローンフィルターを適用します。 --filter--recurse-submodules が必要です。 これは、設定オプション clone.filterSubmodules を設定することでデフォルトで有効にすることができます。

--mirror

ソースリポジトリのミラーを設定します。 これは --bare を意味します。 --bare と比較して、--mirror はソースのローカルブランチをターゲットのローカルブランチにマッピングするだけでなく、すべての参照(リモート追跡ブランチ、メモなどを含む)をマッピングし、refspec 構成を設定して、これらのすべての参照がターゲットリポジトリの git remote update によって上書きされるようにします。

-o <名前>
--origin <名前>

アップストリームリポジトリを追跡するためにリモート名 origin を使用する代わりに、<名前> を使用します。 設定の clone.defaultRemoteName をオーバーライドします。

-b <名前>
--branch <名前>

新しく作成された HEAD を、クローンされたリポジトリの HEAD が指すブランチではなく、<名前> ブランチにポイントします。 ベアリポジトリ以外では、これはチェックアウトされるブランチです。 --branch はタグも受け取り、結果のリポジトリでそのコミットで HEAD をデタッチします。

-u <upload-pack>
--upload-pack <upload-pack>

指定された場合、クローン元のレポジトリが ssh 経由でアクセスされると、相手側で実行されるコマンドのデフォルト以外のパスが指定されます。

--template=<テンプレートディレクトリ>

テンプレートが使用されるディレクトリを指定します。(git-init[1] の「テンプレートディレクトリ」セクションを参照してください。)

-c <キー>=<値>
--config <キー>=<値>

新しく作成されたリポジトリで構成変数を設定します。これは、リポジトリが初期化された直後、リモート履歴がフェッチされたり、ファイルがチェックアウトされる前に有効になります。 <キー> は、git-config[1] で想定されているのと同じ形式です(例:core.eol=true)。 同じキーに複数の値が指定されている場合、各値は設定ファイルに書き込まれます。 これにより、たとえば、origin リモートに追加のフェッチ refspec を安全に追加できます。

現在の実装の制限により、一部の構成変数は、最初のフェッチとチェックアウト後まで有効になりません。 有効にならないことがわかっている構成変数は、remote.<名前>.mirror および remote.<名前>.tagOpt です。 代わりに、対応する --mirror および --no-tags オプションを使用してください。

--depth <深さ>

履歴が指定されたコミット数に切り詰められた *浅い* クローンを作成します。 すべてのブランチの先端付近の履歴をフェッチするために --no-single-branch が指定されていない限り、--single-branch が暗黙指定されます。 サブモジュールを浅くクローンする場合は、--shallow-submodules も渡します。

--shallow-since=<日付>

指定された時刻以降の履歴を持つ浅いクローンを作成します。

--shallow-exclude=<リビジョン>

指定されたリモートブランチまたはタグから到達可能なコミットを除外した履歴を持つ浅いクローンを作成します。 このオプションは複数回指定できます。

--[no-]single-branch

--branch オプションで指定された単一のブランチの先端、またはプライマリブランチのリモートの HEAD が指すブランチのみにつながる履歴のみをクローンします。 結果のリポジトリへのさらなるフェッチは、このオプションが初期クローニングに使用されたブランチのリモート追跡ブランチのみを更新します。 --single-branch クローンが作成されたときにリモートの HEAD がどのブランチも指していなかった場合、リモート追跡ブランチは作成されません。

--no-tags

タグをクローンせず、設定で remote.<remote>.tagOpt=--no-tags を設定し、将来の git pull および git fetch 操作がタグをたどらないようにします。 後続の明示的なタグフェッチは引き続き機能します(git-fetch[1] を参照)。

--single-branch と組み合わせて使用​​して、クローンされた単一のブランチ以外の参照がないブランチをクローンして維持できます。 これは、たとえば、検索インデックス作成のために、一部のリポジトリのデフォルトブランチの最小限のクローンを維持する場合に役立ちます。

--recurse-submodules[=<パス指定>]

クローンが作成された後、指定された *<パス指定>* に基づいて、内部のサブモジュールを初期化してクローンします。 *=<パス指定>* が指定されていない場合、すべてのサブモジュールが初期化され、クローンされます。 このオプションは、複数のエントリで構成されるパス指定に対して複数回指定できます。 結果のクローンには、指定されたパス指定、またはパス指定が指定されていない場合は "."(すべてのサブモジュールを意味する)に設定された submodule.active があります。

サブモジュールは、デフォルト設定を使用して初期化およびクローンされます。 これは、クローンが完了した直後に git submodule update --init --recursive <パス指定> を実行することと同じです。 クローンされたリポジトリに作業ツリー/チェックアウトがない場合(つまり、--no-checkout/-n--bare、または --mirror のいずれかが指定されている場合)、このオプションは無視されます)

--[no-]shallow-submodules

クローンされるすべてのサブモジュールは、深さ 1 の浅いクローンになります。

--[no-]remote-submodules

クローンされるすべてのサブモジュールは、スーパープロジェクトの記録された SHA-1 ではなく、サブモジュールのリモート追跡ブランチのステータスを使用してサブモジュールを更新します。 git submodule update--remote を渡すことと同じです。

--separate-git-dir=<git-dir>

クローンされたリポジトリを本来あるべき場所に配置する代わりに、指定されたディレクトリに配置し、そこへのファイルシステムに依存しない Git シンボリックリンクを作成します。 その結果、Git リポジトリを作業ツリーから分離できます。

--ref-format=<参照フォーマット>

リポジトリに指定された参照ストレージフォーマットを指定します。 有効な値は次のとおりです

  • files は、packed-refs を使用した疎ファイル用です。 これがデフォルトです。

  • reftable は、reftable フォーマット用です。 このフォーマットは実験段階であり、その内部は変更される可能性があります。

-j <n>
--jobs <n>

同時にフェッチされるサブモジュールの数。 デフォルトは submodule.fetchJobs オプションです。

<リポジトリ>

クローン元の(おそらくリモートの) *<リポジトリ>*。 リポジトリの指定の詳細については、以下のGIT URL セクションを参照してください。

<ディレクトリ>

クローン先の新しいディレクトリの名前。 *<ディレクトリ>* が明示的に指定されていない場合、ソースリポジトリの「人間らしい」部分が使用されます(/path/to/repo.git の場合は repohost.xz:foo/.git の場合は foo)。 既存のディレクトリへのクローニングは、ディレクトリが空の場合にのみ許可されます。

--bundle-uri=<URI>

リモートからフェッチする前に、指定された *<URI>* からバンドルをフェッチし、データをローカルリポジトリにアンバンドルします。 バンドル内の参照は、非表示の refs/bundle/* 名前空間の下に保存されます。 このオプションは、--depth--shallow-since、および --shallow-exclude と互換性がありません。

GIT URL

一般に、URL には、トランスポートプロトコル、リモートサーバーのアドレス、およびリポジトリへのパスに関する情報が含まれています。 トランスポートプロトコルによっては、この情報の一部が存在しない場合があります。

Git は、ssh、git、http、および https プロトコルをサポートしています(さらに、ftp および ftps はフェッチに使用できますが、これは非効率的であり、非推奨です。使用しないでください)。

ネイティブトランスポート(つまり git:// URL)は認証を行わないため、安全でないネットワークでは注意して使用する必要があります。

次の構文をそれらと共に使用できます

  • ssh://[<ユーザー>@]<ホスト>[:<ポート>]/<Gitリポジトリへのパス>

  • git://<ホスト>[:<ポート>]/<Gitリポジトリへのパス>

  • http[s]://<ホスト>[:<ポート>]/<Gitリポジトリへのパス>

  • ftp[s]://<ホスト>[:<ポート>]/<Gitリポジトリへのパス>

ssh プロトコルでは、代替の scp のような構文も使用できます

  • [<ユーザー>@]<ホスト>:/<Gitリポジトリへのパス>

この構文は、最初のコロンの前にスラッシュがない場合にのみ認識されます。 これは、コロンを含むローカルパスを区別するのに役立ちます。 たとえば、ローカルパス foo:bar は、ssh url として誤って解釈されないように、絶対パスまたは ./foo:bar として指定できます。

ssh および git プロトコルは、さらに ~<ユーザー名> 展開をサポートしています

  • ssh://[<ユーザー>@]<ホスト>[:<ポート>]/~<ユーザー>/<Gitリポジトリへのパス>

  • git://<ホスト>[:<ポート>]/~<ユーザー>/<Gitリポジトリへのパス>

  • [<ユーザー>@]<ホスト>:~<ユーザー>/<Gitリポジトリへのパス>

Git ネイティブでサポートされているローカルリポジトリの場合、次の構文を使用できます

これら 2 つの構文は、前者が --local オプションを意味することを除いて、ほとんど同じです。

git clonegit fetch、および git pull は適切なバンドルファイルを受け入れますが、git push は受け入れません。 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"のようなURL、または"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-config[1]ドキュメントから選択的に含まれています。内容はそこに記載されているものと同じです。

init.templateDir

テンプレートのコピー元となるディレクトリを指定します。(git-init[1]の「テンプレートディレクトリ」セクションを参照してください。)

init.defaultBranch

新しいリポジトリを初期化するときなどに、デフォルトのブランチ名をオーバーライドできます。

init.defaultObjectFormat

新しいリポジトリのデフォルトのオブジェクト形式をオーバーライドできます。git-init[1]--object-format=を参照してください。コマンドラインオプションとGIT_DEFAULT_HASH環境変数は、どちらもこの設定よりも優先されます。

init.defaultRefFormat

新しいリポジトリのデフォルトの参照ストレージ形式をオーバーライドできます。git-init[1]--ref-format=を参照してください。コマンドラインオプションとGIT_DEFAULT_REF_FORMAT環境変数は、どちらもこの設定よりも優先されます。

clone.defaultRemoteName

リポジトリのクローン作成時に作成するリモートの名前。デフォルトはoriginです。--originコマンドラインオプションを渡すことでオーバーライドできます。

clone.rejectShallow

リポジトリがshallowなものである場合、クローン作成を拒否します。これは、コマンドラインで--reject-shallowオプションを渡すことでオーバーライドできます。

clone.filterSubmodules

部分クローンフィルターが指定され(git-rev-list[1]--filterを参照)、--recurse-submodulesが使用されている場合、フィルターをサブモジュールにも適用します。

GIT

git[1]スイートの一部

scroll-to-top