セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
- 2.49.1 → 2.50.1 変更なし
-
2.49.0
2025-03-14
- 2.48.1 → 2.48.2 変更なし
-
2.48.0
2025-01-10
- 2.47.1 → 2.47.3 変更なし
-
2.47.0
2024-10-06
- 2.46.1 → 2.46.4 変更なし
-
2.46.0
2024-07-29
- 2.45.1 → 2.45.4 変更なし
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.4 変更なし
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 変更なし
-
2.43.0
2023-11-20
- 2.41.1 → 2.42.4 変更なし
-
2.41.0
2023-06-01
- 2.38.1 → 2.40.4 変更なし
-
2.38.0
2022-10-02
- 2.36.1 → 2.37.7 変更なし
-
2.36.0
2022-04-18
- 2.35.1 → 2.35.8 変更なし
-
2.35.0
2022-01-24
- 2.32.1 → 2.34.8 変更なし
-
2.32.0
2021-06-06
- 2.30.2 → 2.31.8 変更なし
-
2.30.1
2021-02-08
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 変更なし
-
2.29.0
2020-10-19
- 2.28.1 変更なし
-
2.28.0
2020-07-27
- 2.27.1 変更なし
-
2.27.0
2020-06-01
- 2.25.1 → 2.26.3 変更なし
-
2.25.0
2020-01-13
- 2.23.1 → 2.24.4 変更なし
-
2.23.0
2019-08-16
- 2.22.2 → 2.22.5 変更なし
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 変更なし
-
2.21.0
2019-02-24
- 2.18.1 → 2.20.5 変更なし
-
2.18.0
2018-06-21
- 2.17.0 → 2.17.6 変更なし
-
2.16.6
2019-12-06
- 2.15.4 変更なし
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
- 2.12.5 変更なし
-
2.11.4
2017-09-22
- 2.10.5 変更なし
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
- 2.4.12 → 2.6.7 変更なし
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 変更なし
-
2.0.5
2014-12-17
概要
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
-
クローン元のリポジトリがローカルマシン上にある場合、ハードリンクを使用する代わりに、
.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
の場合はrepo
、host.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
clone
、git
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]スイートの一部