セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
- 2.47.1 → 2.50.1 変更なし
-
2.47.0
2024-10-06
- 2.44.1 → 2.46.4 変更なし
-
2.44.0
2024-02-23
- 2.42.1 → 2.43.7 変更なし
-
2.42.0
2023-08-21
- 2.36.1 → 2.41.3 変更なし
-
2.36.0
2022-04-18
- 2.28.1 → 2.35.8 変更なし
-
2.28.0
2020-07-27
- 2.26.1 → 2.27.1 変更なし
-
2.26.0
2020-03-22
- 2.25.2 → 2.25.5 変更なし
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 変更なし
-
2.24.0
2019-11-04
- 2.22.1 → 2.23.4 変更なし
-
2.22.0
2019-06-07
- 2.19.1 → 2.21.4 変更なし
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.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
2017-09-22
- 2.11.4 変更なし
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.7.6 変更なし
-
2.6.7
2017-05-05
- 2.5.6 変更なし
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 変更なし
-
2.0.5
2014-12-17
概要
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 であるか、( `./` または `../` で始まる場合) スーパープロジェクトのデフォルトのリモートリポジトリからの相対パスである場合があります (スーパープロジェクト `bar.git` のすぐ隣にあるリポジトリ `foo.git` を指定するには、相対 URL の規則に従って期待される `./foo.git` ではなく、`../foo.git` を使用する必要があることに注意してください。これは Git での相対 URL の評価が相対ディレクトリの評価と同じであるためです)。
デフォルトのリモートは、現在のブランチのリモート追跡ブランチのリモートです。そのようなリモート追跡ブランチが存在しない場合、または HEAD が分離されている場合、「origin」がデフォルトのリモートと見なされます。スーパープロジェクトにデフォルトのリモートが設定されていない場合、スーパープロジェクトはそれ自身の権限あるアップストリームであり、代わりに現在の作業ディレクトリが使用されます。
オプションの引数 <path> は、クローンされたサブモジュールがスーパープロジェクト内に存在する相対パスです。<path> が指定されていない場合、ソースリポジトリの正規の部分が使用されます ("/path/to/repo.git" の場合は "repo"、"host.xz:foo/.git" の場合は "foo")。<path> が存在し、すでに有効な Git リポジトリである場合、クローンせずにコミットするためにステージングされます。<path> は、
--name
を使用して論理名を指定しない限り、サブモジュールの設定エントリにおける論理名としても使用されます。指定された URL は、後続のユーザーがスーパープロジェクトをクローンするために
.gitmodules
に記録されます。URL がスーパープロジェクトのリポジトリに対する相対パスとして指定されている場合、スーパープロジェクトとサブモジュールリポジトリは同じ相対パスに保持され、スーパープロジェクトの URL のみを提供する必要があるという前提です。git-submodule は、.gitmodules
の相対 URL を使用してサブモジュールを正しく特定します。--ref-format
<format> が指定されている場合、新しくクローンされたサブモジュールの参照格納形式がそれに応じて設定されます。 - status [--cached] [--recursive] [--] [<path>…]
-
サブモジュールのステータスを表示します。これは、各サブモジュールの現在チェックアウトされているコミットの SHA-1 と、サブモジュールのパス、およびその SHA-1 の git describe の出力も表示します。サブモジュールが初期化されていない場合は
-
、現在チェックアウトされているサブモジュールのコミットがコンテナリポジトリのインデックスにある SHA-1 と一致しない場合は+
、サブモジュールにマージの競合がある場合はU
が各 SHA-1 の前に付く可能性があります。--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>…)
-
指定されたサブモジュールの登録を解除します。つまり、
submodule.$name
セクション全体を .git/config から作業ツリーと共に削除します。git
submodule
update
、git
submodule
foreach
、およびgit
submodule
sync
への以降の呼び出しは、それらが再度初期化されるまで登録解除されたサブモジュールをスキップします。したがって、作業ツリーにサブモジュールのローカルチェックアウトを保持したくない場合は、このコマンドを使用してください。このコマンドをパス指定なしで実行すると、すべての登録解除を防ぐためにエラーが発生します。
--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
-
スーパープロジェクトに記録されているコミットが、サブモジュール内の detached HEAD にチェックアウトされます。
--force
が指定されている場合、コンテナリポジトリのインデックスに指定されたコミットがサブモジュールにチェックアウトされているコミットとすでに一致している場合でも、サブモジュールはチェックアウトされます (git
checkout
--force
を使用して)。 - rebase
-
サブモジュールの現在のブランチがスーパープロジェクトに記録されているコミットにリベースされます。
- merge
-
スーパープロジェクトに記録されているコミットが、サブモジュールの現在のブランチにマージされます。
以下の更新手順には追加の制限があります。
サブモジュールがまだ初期化されておらず、
.gitmodules
に保存されている設定を単に利用したい場合は、--init
オプションを使用してサブモジュールを自動的に初期化できます。--recursive
が指定されている場合、このコマンドは登録済みのサブモジュールに再帰的に入り込み、その中のネストされたサブモジュールも更新します。--ref-format
<format> が指定されている場合、新しくクローンされたサブモジュールの参照格納形式がそれに応じて設定されます。--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 を実行する場合 (checkout 手順でのみ有効)、別のコミットに切り替えるときにサブモジュール内のローカルな変更を破棄します。また、コンテナリポジトリのインデックスにリストされているコミットがサブモジュールにチェックアウトされているコミットと一致する場合でも、常にサブモジュールでチェックアウト操作を実行します。
- --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 コマンドでのみ有効です。スーパープロジェクトに記録されたコミットを、サブモジュール内の detached HEAD にチェックアウトします。これがデフォルトの動作であり、このオプションの主な用途は
submodule.$name.update
がcheckout
以外の値に設定されている場合にそれをオーバーライドすることです。submodule.$name.update
キーが明示的に設定されていないか、checkout
に設定されている場合、このオプションは暗黙的です。 - --merge
-
このオプションは update コマンドでのみ有効です。スーパープロジェクトに記録されたコミットをサブモジュールの現在のブランチにマージします。このオプションが指定されている場合、サブモジュールの HEAD は detached になりません。マージの失敗によってこのプロセスが妨げられた場合、サブモジュール内の結果として生じる競合を通常の競合解決ツールで解決する必要があります。
submodule.$name.update
キーがmerge
に設定されている場合、このオプションは暗黙的です。 - --rebase
-
このオプションは update コマンドでのみ有効です。現在のブランチをスーパープロジェクトに記録されたコミットにリベースします。このオプションが指定されている場合、サブモジュールの HEAD は detached になりません。マージの失敗によってこのプロセスが妨げられた場合、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 コマンドで有効です。指定されたリビジョン数に履歴を切り詰めた shallow クローンを作成します。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 コマンドでのみ有効です。更新時に HEAD または --branch で指定されたブランチのいずれか1つのブランチのみをクローンします。
- <path>…
-
サブモジュールへのパス。指定された場合、コマンドは指定されたパスにあるサブモジュールに対してのみ動作するように制限されます。(この引数は add で必須です)。
ファイル
サブモジュールを初期化する場合、コンテナリポジトリのトップレベルディレクトリにある .gitmodules
ファイルが各サブモジュールの URL を見つけるために使用されます。このファイルは $GIT_DIR/config
と同じ方法でフォーマットされている必要があります。各サブモジュール URL のキーは "submodule.$name.url" です。詳細については gitmodules[5] を参照してください。
GIT
git[1]スイートの一部