セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ
デバッグ
メール
外部システム
サーバー管理
-
2.47.0
10/06/24
- 2.44.1 → 2.46.2 変更なし
-
2.44.0
02/23/24
- 2.42.1 → 2.43.5 変更なし
-
2.42.0
08/21/23
- 2.36.1 → 2.41.2 変更なし
-
2.36.0
04/18/22
- 2.28.1 → 2.35.8 変更なし
-
2.28.0
07/27/20
- 2.26.1 → 2.27.1 変更なし
-
2.26.0
03/22/20
- 2.25.2 → 2.25.5 変更なし
-
2.25.1
02/17/20
-
2.25.0
01/13/20
- 2.24.1 → 2.24.4 変更なし
-
2.24.0
11/04/19
- 2.22.1 → 2.23.4 変更なし
-
2.22.0
06/07/19
- 2.19.1 → 2.21.4 変更なし
-
2.19.0
09/10/18
- 2.18.1 → 2.18.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
09/22/17
- 2.11.4 変更なし
-
2.10.5
09/22/17
-
2.9.5
07/30/17
-
2.8.6
07/30/17
- 2.7.6 変更なし
-
2.6.7
05/05/17
- 2.5.6 変更なし
-
2.4.12
05/05/17
-
2.3.10
09/28/15
- 2.1.4 → 2.2.3 変更なし
-
2.0.5
12/17/14
概要
git submodule [--quiet] [--cached] git submodule [--quiet] add [<options>] [--] <repository> [<path>] git submodule [--quiet] status [--cached] [--recursive] [--] [<path>…] git submodule [--quiet] init [--] [<path>…] git submodule [--quiet] deinit [-f|--force] (--all|[--] <path>…) git submodule [--quiet] update [<options>] [--] [<path>…] git submodule [--quiet] set-branch [<options>] [--] <path> git submodule [--quiet] set-url [--] <path> <newurl> git submodule [--quiet] summary [<options>] [--] [<path>…] git submodule [--quiet] foreach [--recursive] <command> git submodule [--quiet] sync [--recursive] [--] [<path>…] git submodule [--quiet] absorbgitdirs [--] [<path>…]
説明
サブモジュールの検査、更新、管理を行います。
サブモジュールに関する詳細については、gitsubmodules[7] を参照してください。
コマンド
引数なしで実行すると、既存のサブモジュールの状態が表示されます。サブモジュールに対する操作を実行するためのいくつかのサブコマンドが利用可能です。
- add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--ref-format <format>] [--depth <depth>] [--] <repository> [<path>]
-
指定されたリポジトリを、次のコミット対象の変更セットに、指定されたパスのサブモジュールとして現在のプロジェクト(「スーパープロジェクト」と呼ばれる)に追加します。
<repository> は、新しいサブモジュールのオリジンリポジトリの URL です。これは絶対 URL でも、(./ または ../ で始まる場合は) スーパープロジェクトのデフォルトのリモートリポジトリに対する相対的な場所でもかまいません (相対 URL の規則に従うと予想されるかもしれませんが、スーパープロジェクト *bar.git* のすぐ隣にあるリポジトリ *foo.git* を指定するには、`./foo.git` ではなく `../foo.git` を使用する必要があることに注意してください。これは、Git における相対 URL の評価が相対ディレクトリの評価と同じであるためです)。
デフォルトのリモートは、現在のブランチのリモート追跡ブランチのリモートです。そのようなリモート追跡ブランチが存在しない場合、または HEAD が切り離されている場合は、"origin" がデフォルトのリモートとみなされます。スーパープロジェクトにデフォルトのリモートが設定されていない場合、スーパープロジェクト自体が認証されたアップストリームとなり、代わりに現在の作業ディレクトリが使用されます。
オプションの引数 <path> は、クローンされたサブモジュールがスーパープロジェクト内に存在する相対的な場所です。<path> が指定されていない場合、ソースリポジトリの正規部分が使用されます ("/path/to/repo.git" の場合は "repo"、"host.xz:foo/.git" の場合は "foo")。<path> が存在し、既に有効な Git リポジトリである場合、クローンせずにコミットのためにステージングされます。また、`--name` を使用して論理名を指定しない限り、<path> は構成エントリのサブモジュールの論理名としても使用されます。
指定された URL は、スーパープロジェクトをクローンする後続のユーザーが使用できるように、`.gitmodules` に記録されます。URL がスーパープロジェクトのリポジトリに対して相対的に指定されている場合、スーパープロジェクトとサブモジュールリポジトリは同じ相対的な場所にまとめて保管されると推定され、スーパープロジェクトの URL のみを提供する必要があります。git-submodule は、`.gitmodules` の相対 URL を使用してサブモジュールを正しく検出します。
`--ref-format <format>` が指定されている場合、新しくクローンされたサブモジュールの ref ストレージ形式がそれに応じて設定されます。
- status [--cached] [--recursive] [--] [<path>…]
-
サブモジュールの状態を表示します。これにより、各サブモジュールの現在チェックアウトされているコミットの SHA-1、サブモジュールのパス、および SHA-1 の *git describe* の出力が表示されます。各 SHA-1 は、サブモジュールが初期化されていない場合は `-`、現在チェックアウトされているサブモジュールコミットが包含リポジトリのインデックスにある SHA-1 と一致しない場合は `+`、サブモジュールにマージ競合がある場合は `U` が接頭辞として付く場合があります。
`--cached` が指定されている場合、このコマンドは代わりに各サブモジュールのスーパープロジェクトに記録されている SHA-1 を出力します。
`--recursive` が指定されている場合、このコマンドは入れ子になったサブモジュールに再帰し、その状態も表示します。
インデックスまたは HEAD に記録されたコミットに対する現在初期化されているサブモジュールの変更のみに関心がある場合は、git-status[1] および git-diff[1] もその情報を提供します (また、サブモジュールの作業ツリーへの変更も報告できます)。
- init [--] [<path>…]
-
`.gitmodules` からの同じ設定をテンプレートとして使用して、`.git/config` に `submodule.$name.url` を設定することにより、(別の場所で追加およびコミットされた) インデックスに記録されたサブモジュールを初期化します。URL が相対的な場合、デフォルトのリモートを使用して解決されます。デフォルトのリモートがない場合、現在のリポジトリがアップストリームであると想定されます。
オプションの <path> 引数は、初期化されるサブモジュールを制限します。パスが指定されておらず、submodule.active が設定されている場合、アクティブになるように設定されたサブモジュールが初期化されます。それ以外の場合は、すべてのサブモジュールが初期化されます。
また、`.gitmodules` ファイルに存在する場合は、`submodule.$name.update` の値が `.git/config` にコピーされますが、(1) このコマンドは `.git/config` の既存の情報を変更せず、(2) カスタムコマンドに設定されている `submodule.$name.update` はセキュリティ上の理由からコピー**されません**。
その後、ローカル設定用に `.git/config` のサブモジュールクローン URL をカスタマイズし、`git submodule update` に進むことができます。サブモジュールの場所をカスタマイズする予定がない場合は、明示的な *init* ステップなしで `git submodule update --init` を使用することもできます。
デフォルトのリモートの定義については、add サブコマンドを参照してください。
- deinit [-f|--force] (--all|[--] <path>…)
-
指定されたサブモジュールを登録解除します。つまり、`.git/config` から `submodule.$name` セクション全体を、その作業ツリーとともに削除します。`git submodule update`、`git submodule foreach`、および `git submodule sync` の後続の呼び出しは、再び初期化されるまで、登録解除されたサブモジュールをスキップするため、作業ツリーにサブモジュールのローカルチェックアウトをもう必要としない場合は、このコマンドを使用します。
このコマンドが pathspec なしで実行されると、すべてを登録解除する代わりにエラーが発生し、誤りを防ぎます。
`--force` が指定されている場合、サブモジュールの作業ツリーにローカルな変更が含まれている場合でも削除されます。
リポジトリからサブモジュールを実際に削除してコミットする場合は、代わりに git-rm[1] を使用してください。削除オプションについては、gitsubmodules[7] を参照してください。
- update [--init] [--remote] [-N|--no-fetch] [--[no-]recommend-shallow] [-f|--force] [--checkout|--rebase|--merge] [--reference <repository>] [--ref-format <format>] [--depth <depth>] [--recursive] [--jobs <n>] [--[no-]single-branch] [--filter <filter-spec>] [--] [<path>…]
-
不足しているサブモジュールをクローンし、サブモジュールで不足しているコミットをフェッチし、サブモジュールの作業ツリーを更新することにより、スーパープロジェクトが期待するものと一致するように、登録されたサブモジュールを更新します。「更新」は、コマンドラインオプションと `submodule.<name>.update` 設定変数の値に応じて、いくつかの方法で実行できます。コマンドラインオプションは設定変数よりも優先されます。どちらも指定されていない場合は、*checkout* が実行されます。(注: `.gitmodules` ファイルの内容は、この時点では無関係です。`.gitmodules` の使用方法については、上記の `git submodule init` を参照してください)。コマンドラインと `submodule.<name>.update` 設定の両方でサポートされている *update* 手順は次のとおりです。
- checkout
-
スーパープロジェクトに記録されたコミットが、切り離された HEAD 上のサブモジュールでチェックアウトされます。
`--force` が指定されている場合、包含リポジトリのインデックスで指定されたコミットがサブモジュールでチェックアウトされたコミットと既に一致している場合でも、サブモジュールが ( `git checkout --force` を使用して) チェックアウトされます。
- rebase
-
サブモジュールの現在のブランチが、スーパープロジェクトに記録されたコミットにリベースされます。
- merge
-
スーパープロジェクトに記録されたコミットが、サブモジュールの現在のブランチにマージされます。
次の更新手順には、追加の制限があります
サブモジュールがまだ初期化されておらず、
.gitmodules
に保存されている設定をそのまま使用したい場合は、--init
オプションを使用するとサブモジュールを自動的に初期化できます。--recursive
が指定されている場合、このコマンドは登録されたサブモジュールを再帰的に処理し、内部のネストされたサブモジュールもすべて更新します。`--ref-format <format>` が指定されている場合、新しくクローンされたサブモジュールの ref ストレージ形式がそれに応じて設定されます。
--filter <filter-spec>
が指定された場合、指定された部分クローンフィルターがサブモジュールに適用されます。フィルター仕様の詳細については、git-rev-list[1]を参照してください。 - set-branch (-b|--branch) <branch> [--] <path>
- set-branch (-d|--default) [--] <path>
-
サブモジュールのデフォルトのリモート追跡ブランチを設定します。
--branch
オプションを使用すると、リモートブランチを指定できます。--default
オプションは、submodule.<name>.branch
設定キーを削除します。これにより、追跡ブランチはリモートの *HEAD* がデフォルトになります。 - set-url [--] <path> <newurl>
-
指定されたサブモジュールのURLを <newurl> に設定します。その後、サブモジュールの新しいリモートURL設定を自動的に同期します。
- summary [--cached|--files] [(-n|--summary-limit) <n>] [commit] [--] [<path>…]
-
指定されたコミット(デフォルトはHEAD)と作業ツリー/インデックスの間のコミットの概要を表示します。問題のサブモジュールについては、指定されたスーパープロジェクトのコミットとインデックスまたは作業ツリー(
--cached
で切り替え)の間のサブモジュール内のコミットのシリーズが表示されます。--files
オプションが指定されている場合、スーパープロジェクトのインデックスとサブモジュールの作業ツリーの間のサブモジュール内のコミットのシリーズが表示されます(このオプションでは、--cached
オプションを使用したり、明示的なコミットを指定したりすることはできません)。git-diff[1] で
--submodule=log
オプションを使用すると、その情報も提供されます。 - foreach [--recursive] <command>
-
チェックアウトされた各サブモジュールで任意のシェルコマンドを評価します。コマンドは、変数 $name、$sm_path、$displaypath、$sha1、および $toplevel にアクセスできます。$name は
.gitmodules
内の関連するサブモジュールセクションの名前、$sm_path は直近のスーパープロジェクトに記録されているサブモジュールのパス、$displaypath は現在の作業ディレクトリからサブモジュールのルートディレクトリへの相対パス、$sha1 は直近のスーパープロジェクトに記録されているコミット、$toplevel は直近のスーパープロジェクトの最上位への絶対パスです。Windows での *\$PATH* との競合を避けるために、*\$path* 変数は非推奨となり、*\$sm_path* 変数のシノニムになりました。スーパープロジェクトで定義されているがチェックアウトされていないサブモジュールは、このコマンドでは無視されます。--quiet
が指定されていない限り、foreach はコマンドを評価する前に各サブモジュールの名前を出力します。--recursive
が指定されている場合、サブモジュールは再帰的にトラバースされます(つまり、指定されたシェルコマンドはネストされたサブモジュールでも評価されます)。いずれかのサブモジュールでコマンドがゼロ以外の値を返すと、処理が終了します。これは、コマンドの最後に *|| :* を追加することで上書きできます。例として、以下のコマンドは、各サブモジュールのパスと現在チェックアウトされているコミットを表示します。
git submodule foreach 'echo $sm_path `git rev-parse HEAD`'
- sync [--recursive] [--] [<path>…]
-
サブモジュールのリモートURL設定を、
.gitmodules
で指定された値に同期します。これは、.git/config にURLエントリが既にあるサブモジュール(初期化された場合、または新しく追加された場合)にのみ影響します。これは、サブモジュールのURLが上流で変更された場合や、それに応じてローカルリポジトリを更新する必要がある場合に役立ちます。git submodule sync
はすべてのサブモジュールを同期しますが、git submodule sync -- A
はサブモジュール "A" のみを同期します。--recursive
が指定されている場合、このコマンドは登録されたサブモジュールを再帰的に処理し、内部のネストされたサブモジュールもすべて同期します。 - absorbgitdirs
-
サブモジュールのgitディレクトリがサブモジュール内にある場合、サブモジュールのgitディレクトリをスーパープロジェクトの
$GIT_DIR/modules
パスに移動し、core.worktree
を設定し、スーパープロジェクトのgitディレクトリに埋め込まれたgitディレクトリを指す .git ファイルを追加して、gitディレクトリとその作業ディレクトリを接続します。独立してクローンされ、後でサブモジュールとして追加されたリポジトリ、または古い設定では、サブモジュールのgitディレクトリがスーパープロジェクトのgitディレクトリに埋め込まれるのではなく、サブモジュール内にあります。
このコマンドはデフォルトで再帰的です。
オプション
- -q
- --quiet
-
エラーメッセージのみを出力します。
- --progress
-
このオプションは、addおよびupdateコマンドでのみ有効です。デフォルトでは、標準エラーストリームがターミナルに接続されている場合、-qが指定されていない限り、進行状況が報告されます。このフラグは、標準エラーストリームがターミナルにリダイレクトされていない場合でも、進行状況を強制します。
- --all
-
このオプションは、deinitコマンドでのみ有効です。ワーキングツリー内のすべてのサブモジュールの登録を解除します。
- -b <branch>
- --branch <branch>
-
サブモジュールとして追加するリポジトリのブランチ。ブランチの名前は、
update --remote
用に.gitmodules
にsubmodule.<name>.branch
として記録されます。特別な値の.
は、サブモジュール内のブランチの名前が、現在のリポジトリの現在のブランチと同じ名前である必要があることを示すために使用されます。このオプションが指定されていない場合は、リモートの *HEAD* がデフォルトになります。 - -f
- --force
-
このオプションは、add、deinit、およびupdateコマンドでのみ有効です。addを実行する場合、それ以外の場合は無視されるサブモジュールパスの追加を許可します。deinitを実行する場合、ローカルの変更が含まれていてもサブモジュールのワーキングツリーは削除されます。updateを実行する場合(チェックアウト手順でのみ有効)、別のコミットに切り替えるときにサブモジュール内のローカルの変更を破棄します。また、包含リポジトリのインデックスにリストされているコミットがサブモジュールでチェックアウトされたコミットと一致する場合でも、常にサブモジュールでチェックアウト操作を実行します。
- --cached
-
このオプションは、statusおよびsummaryコマンドでのみ有効です。これらのコマンドは通常、サブモジュールHEADにあるコミットを使用しますが、このオプションを指定すると、インデックスに保存されているコミットが代わりに使用されます。
- --files
-
このオプションは、summaryコマンドでのみ有効です。このオプションを使用すると、このコマンドはインデックス内のコミットとサブモジュールHEAD内のコミットを比較します。
- -n
- --summary-limit
-
このオプションは、summaryコマンドでのみ有効です。概要サイズ(合計で表示されるコミット数)を制限します。0を指定すると概要が無効になり、負の数を指定すると無制限(デフォルト)になります。この制限は、変更されたサブモジュールにのみ適用されます。サイズは、追加/削除/タイプ変更されたサブモジュールの場合、常に1に制限されます。
- --remote
-
このオプションは、updateコマンドでのみ有効です。サブモジュールを更新するためにスーパープロジェクトの記録されたSHA-1を使用する代わりに、サブモジュールのリモート追跡ブランチのステータスを使用します。使用されるリモートはブランチのリモート (
branch.<name>.remote
) で、デフォルトはorigin
です。使用されるリモートブランチのデフォルトはリモートHEAD
ですが、ブランチ名は.gitmodules
または.git/config
のいずれかでsubmodule.<name>.branch
オプションを設定することでオーバーライドできます (.git/config
が優先されます)。これは、サポートされている任意の更新手順 (
--checkout
、--rebase
など) で機能します。唯一の変更点は、ターゲットSHA-1のソースです。たとえば、submodule update --remote --merge
は、上流のサブモジュールの変更をサブモジュールにマージしますが、submodule update --merge
は、スーパープロジェクトのgitlinkの変更をサブモジュールにマージします。現在の追跡ブランチの状態を確実にするために、
update --remote
は、SHA-1を計算する前にサブモジュールのリモートリポジトリをフェッチします。フェッチしたくない場合は、submodule update --remote --no-fetch
を使用する必要があります。このオプションを使用して、上流のサブプロジェクトからの変更をサブモジュールの現在のHEADに統合します。または、サブモジュールから
git pull
を実行することもできます。これはリモートブランチ名を除いて同じです。update --remote
は、デフォルトの上流リポジトリとsubmodule.<name>.branch
を使用しますが、git pull
はサブモジュールのbranch.<name>.merge
を使用します。スーパープロジェクトでデフォルトの上流ブランチを配布する場合はsubmodule.<name>.branch
を優先し、サブモジュール自体で作業中にさらにネイティブな感じを求める場合はbranch.<name>.merge
を優先します。 - -N
- --no-fetch
-
このオプションは、updateコマンドでのみ有効です。リモートサイトから新しいオブジェクトをフェッチしないでください。
- --checkout
-
このオプションは、updateコマンドでのみ有効です。サブモジュール内のデタッチされたHEADでスーパープロジェクトに記録されたコミットをチェックアウトします。これがデフォルトの動作であり、このオプションの主な用途は、
submodule.$name.update
がcheckout
以外の値に設定されている場合にそれをオーバーライドすることです。キーsubmodule.$name.update
が明示的に設定されていないか、checkout
に設定されている場合、このオプションは暗黙的です。 - --merge
-
このオプションは、updateコマンドでのみ有効です。スーパープロジェクトに記録されたコミットをサブモジュールの現在のブランチにマージします。このオプションが指定されている場合、サブモジュールのHEADはデタッチされません。マージの失敗によりこのプロセスが妨げられた場合、通常のマージ競合解決ツールを使用してサブモジュール内の競合を解決する必要があります。キー
submodule.$name.update
がmerge
に設定されている場合、このオプションは暗黙的です。 - --rebase
-
このオプションは、updateコマンドでのみ有効です。現在のブランチを、スーパープロジェクトに記録されたコミットにリベースします。このオプションが指定されている場合、サブモジュールのHEADはデタッチされません。マージの失敗によりこのプロセスが妨げられた場合、git-rebase[1] を使用してこれらの失敗を解決する必要があります。キー
submodule.$name.update
がrebase
に設定されている場合、このオプションは暗黙的です。 - --init
-
このオプションは、updateコマンドでのみ有効です。「git submodule init」がまだ呼び出されていないすべてのサブモジュールを、更新前に初期化します。
- --name
-
このオプションは、addコマンドでのみ有効です。サブモジュールの名前をデフォルトのパスではなく、指定された文字列に設定します。名前はディレクトリ名として有効である必要があり、*/ で終わることはできません。
- --reference <repository>
-
このオプションは、add および update コマンドでのみ有効です。これらのコマンドは、リモートリポジトリをクローンする必要がある場合があります。この場合、このオプションは git-clone[1] コマンドに渡されます。
注意: git-clone[1] の
--reference
、--shared
、および--dissociate
オプションに関する注意を注意深く読んだ場合を除き、このオプションを使用しないでください。 - --dissociate
-
このオプションは、add および update コマンドでのみ有効です。これらのコマンドは、リモートリポジトリをクローンする必要がある場合があります。この場合、このオプションは git-clone[1] コマンドに渡されます。
注意:
--reference
オプションに関する注意を参照してください。 - --recursive
-
このオプションは、foreach、update、status、および sync コマンドでのみ有効です。サブモジュールを再帰的にトラバースします。操作は、現在のリポジトリのサブモジュールだけでなく、それらのサブモジュール内のネストされたサブモジュール (など) でも実行されます。
- --depth
-
このオプションは、add および update コマンドで有効です。指定されたリビジョン数に切り捨てられた履歴を持つ浅いクローンを作成します。git-clone[1] を参照してください。
- --[no-]recommend-shallow
-
このオプションは、update コマンドでのみ有効です。サブモジュールの初期クローンは、デフォルトで
.gitmodules
ファイルによって提供される推奨のsubmodule.<name>.shallow
を使用します。提案を無視するには、--no-recommend-shallow
を使用します。 - -j <n>
- --jobs <n>
-
このオプションは、update コマンドでのみ有効です。新しいサブモジュールを、指定された数のジョブを使用して並行してクローンします。デフォルトは
submodule.fetchJobs
オプションです。 - --[no-]single-branch
-
このオプションは、update コマンドでのみ有効です。更新中に 1 つのブランチのみをクローンします: HEAD または --branch で指定されたブランチ。
- <path>…
-
サブモジュールへのパス。指定すると、コマンドは指定されたパスにあるサブモジュールでのみ操作を制限します。(この引数は add で必須です)。
ファイル
サブモジュールを初期化する場合、包含リポジトリの最上位ディレクトリにある .gitmodules
ファイルを使用して、各サブモジュールの URL を検索します。このファイルは $GIT_DIR/config
と同じ形式である必要があります。各サブモジュール URL のキーは "submodule.$name.url" です。詳細については、gitmodules[5] を参照してください。
GIT
git[1] スイートの一部