English ▾ トピック ▾ 最新バージョン ▾ git-clone は 2.49.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 にシンボリックリンクがある場合、またはそれがシンボリックリンクである場合、クローンは失敗します。これは、シンボリックリンクを逆参照することによるファイルの意図しないコピーを防ぐためのセキュリティ対策です。

このオプションはセキュリティ上の理由から他のユーザーが所有するリポジトリでは機能せず、クローンを成功させるには --no-local を指定する必要があります。

注記: この操作は、<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] <repository>

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

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

--dissociate

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

-q
--quiet

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

-v
--verbose

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

--progress

標準エラー出力が端末に接続されている場合、デフォルトでは進行状況が報告されますが、--quiet が指定されている場合は除きます。このフラグは、標準エラー出力が端末にリダイレクトされていない場合でも進行状況を強制的に表示します。

--server-option=<option>

プロトコルバージョン2を使用して通信する際に、指定された文字列をサーバーに送信します。指定された文字列には、NULまたはLF文字を含めてはなりません。未知のサーバーオプションを含むサーバーオプションの処理は、サーバー固有です。複数の --server-option=<option> が指定されている場合、それらはすべてコマンドラインでリストされている順序で相手側に送信されます。コマンドラインから --server-option=<option> が指定されていない場合、代わりに構成変数 remote.<name>.serverOption の値が使用されます。

-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-spec>

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

--also-filter-submodules

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

--mirror

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

-o <name>
--origin <name>

上流リポジトリを追跡するためにリモート名 origin を使用する代わりに、<name> を使用します。config の clone.defaultRemoteName を上書きします。

-b <name>
--branch <name>

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

--revision=<rev>

新しいリポジトリを作成し、指定されたリビジョン <rev> までの履歴をフェッチし (それ以外は何もフェッチせず)、リモートトラッキングブランチもローカルブランチも作成せずに、HEAD<rev> にデタッチします。引数は、コミットに剥がれる参照名 (例: refs/heads/main または refs/tags/v1.0) または16進オブジェクト名にすることができます。このオプションは --branch および --mirror と互換性がありません。

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

指定された場合、クローン元のリポジトリが ssh を介してアクセスされるときに、他方の側で実行されるコマンドのデフォルト以外のパスを指定します。

--template=<template-directory>

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

-c <key>=<value>
--config <key>=<value>

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

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

--depth <depth>

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

--shallow-since=<date>

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

--shallow-exclude=<ref>

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

--[no-]single-branch

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

--[no-]tags

タグをクローンするかどうかを制御します。--no-tags が指定された場合、オプションは remote.<remote>.tagOpt=--no-tags 構成を設定することで永続化されます。これにより、将来の git pull および git fetch がタグを追跡しなくなります。その後の明示的なタグのフェッチは引き続き機能します (詳細については git-fetch[1] を参照してください)。

デフォルトではタグはクローンされるため、通常 --tags を渡しても何もしません。ただし、以前の --no-tags を打ち消す場合は別です。

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

--recurse-submodules[=<pathspec>]

クローンが作成された後、提供された <pathspec> に基づいてサブモジュールを初期化してクローンします。=<pathspec> が提供されていない場合、すべてのサブモジュールが初期化され、クローンされます。このオプションは、複数のエントリからなるパススペックに対して複数回指定できます。結果として得られるクローンは、提供されたパススペックに submodule.active が設定されます。パススペックが提供されていない場合は「.」(すべてのサブモジュールを意味する) に設定されます。

サブモジュールはデフォルト設定を使用して初期化およびクローンされます。これは、クローン完了直後に git submodule update --init --recursive <pathspec> を実行するのと同等です。このオプションは、クローンされたリポジトリに作業ツリー/チェックアウトがない場合 (つまり、--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=<ref-format>

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

  • files は、packed-refs を使用するルーズファイル用です。これがデフォルトです。

  • reftable は reftable 形式用です。この形式は実験的であり、内部は変更される可能性があります。

-j <n>
--jobs <n>

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

<repository>

クローン元となる (リモートの可能性もある) <repository>。リポジトリの指定方法の詳細については、以下の GIT URL セクションを参照してください。

<directory>

クローン先の新しいディレクトリの名前。<directory> が明示的に指定されていない場合、ソースリポジトリの「人間的な」部分が使用されます (例: /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://[<user>@]<host>[:<port>]/<path-to-git-repo>

  • git://<host>[:<port>]/<path-to-git-repo>

  • http[s]://<host>[:<port>]/<path-to-git-repo>

  • ftp[s]://<host>[:<port>]/<path-to-git-repo>

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

  • [<user>@]<host>:/<path-to-git-repo>

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

sshおよびgitプロトコルは、~<username> 展開もサポートしています。

  • ssh://[<user>@]<host>[:<port>]/~<user>/<path-to-git-repo>

  • git://<host>[:<port>]/~<user>/<path-to-git-repo>

  • [<user>@]<host>:~<user>/<path-to-git-repo>

Gitがネイティブにサポートしているローカルリポジトリの場合、以下の構文が使用できます。

  • /path/to/repo.git/

  • file:///path/to/repo.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" や "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 clone --no-local /home/otheruser/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

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

clone.filterSubmodules

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

GIT

git[1]スイートの一部

scroll-to-top