セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ
デバッグ
メール
外部システム
サーバー管理
ガイド
- gitattributes
- コマンドラインインターフェースの規約
- 日々のGit
- よくある質問 (FAQ)
- 用語集
- フック
- gitignore
- gitmodules
- リビジョン
- サブモジュール
- チュートリアル
- ワークフロー
- すべてのガイド...
管理
低レベルコマンド
-
2.47.0
10/06/24
- 2.46.1 → 2.46.2 変更なし
-
2.46.0
07/29/24
- 2.45.1 → 2.45.2 変更なし
-
2.45.0
04/29/24
- 2.44.1 → 2.44.2 変更なし
-
2.44.0
02/23/24
- 2.43.1 → 2.43.5 変更なし
-
2.43.0
11/20/23
- 2.41.1 → 2.42.3 変更なし
-
2.41.0
06/01/23
- 2.38.1 → 2.40.3 変更なし
-
2.38.0
10/02/22
- 2.36.1 → 2.37.7 変更なし
-
2.36.0
04/18/22
- 2.35.1 → 2.35.8 変更なし
-
2.35.0
01/24/22
- 2.32.1 → 2.34.8 変更なし
-
2.32.0
06/06/21
- 2.30.2 → 2.31.8 変更なし
-
2.30.1
02/08/21
-
2.30.0
12/27/20
- 2.29.1 → 2.29.3 変更なし
-
2.29.0
10/19/20
- 2.28.1 変更なし
-
2.28.0
07/27/20
- 2.27.1 変更なし
-
2.27.0
06/01/20
- 2.25.1 → 2.26.3 変更なし
-
2.25.0
01/13/20
- 2.23.1 → 2.24.4 変更なし
-
2.23.0
08/16/19
- 2.22.2 → 2.22.5 変更なし
-
2.22.1
08/11/19
-
2.22.0
06/07/19
- 2.21.1 → 2.21.4 変更なし
-
2.21.0
02/24/19
- 2.18.1 → 2.20.5 変更なし
-
2.18.0
06/21/18
- 2.17.0 → 2.17.6 変更なし
-
2.16.6
12/06/19
- 2.15.4 変更なし
-
2.14.6
12/06/19
-
2.13.7
05/22/18
- 2.12.5 変更なし
-
2.11.4
09/22/17
- 2.10.5 変更なし
-
2.9.5
07/30/17
-
2.8.6
07/30/17
-
2.7.6
07/30/17
- 2.4.12 → 2.6.7 変更なし
-
2.3.10
09/28/15
- 2.1.4 → 2.2.3 変更なし
-
2.0.5
12/17/14
概要
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
-
クローンするリポジトリがローカルマシンにある場合、ハードリンクを使用する代わりに、
.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
の場合は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://
[<ユーザー>@
]<ホスト>[:
<ポート>]/
<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 ネイティブでサポートされているローカルリポジトリの場合、次の構文を使用できます
-
/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"のような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]スイートの一部