サブモジュールを更新するコマンドの説明
「git submodule」コマンドは、「サブモジュール」を更新することができます。サブモジュールのクローンについて
「サブモジュール」のチェックアウトを行う際、「サブモジュール」がクローンされていない場合は、自動的に「サブモジュール」がクローンされます。言い換えると「サブモジュール」のクローンは、「サブモジュール」のチェックアウトで行います。
どういう時にサブモジュールを更新できるか
デフォルトでは、「コミットID」と「サブモジュール」の「HEAD」が指す「コミットオブジェクト」が異なる時に、サブモジュールの更新を行うことができます。オプションを指定すれば、「コミットID」と「サブモジュール」の「HEAD」が指す「コミットオブジェクト」が同じ場合でも、サブモジュールの更新を行うことができます。
注意
「サブモジュール」を更新する前に、更新対象の「サブモジュール」を初期化しておいてください。また「サブモジュール」の更新操作は、「スーパープロジェクト」から行ってください。
サブモジュールの更新でできる操作
サブモジュールの更新では、以下の操作を行うことができます。- サブモジュールのチェックアウト
- サブモジュールのマージ
- サブモジュールのリベース
- ユーザー定義のスクリプトによるサブモジュールの更新
1.サブモジュールのチェックアウト
「コミットID」が指す「コミットオブジェクト」をチェックアウトします。チェックアウトしたファイル群は、「サブモジュール」の「ワーキングディレクトリー」に展開されます。
この時、「サブモジュール」の「HEAD」は、「分離したHEAD」になります。
2.サブモジュールのマージ
「サブモジュール」の現在のブランチに、「コミットID」が指す「コミットオブジェクト」をマージします。例えば、以下のような構成だとします。
以下のように、マージを行います。
3.サブモジュールのリベース
「サブモジュール」の現在のブランチを、「コミットID」が指す「コミットオブジェクト」にリベースします。例えば、以下のような構成だとします。
以下のように、リベースを行います。
4.ユーザー定義のスクリプトによるサブモジュールの更新
ユーザーが指定したスクリプトを実行し、スクリプトから「サブモジュール」の更新を行います。スクリプトには「コミットID」が渡されるので、スクリプトで必要な処理を行います。
コマンドのフォーマット
コマンドのフォーマットは以下のようになります。
git submodule <情報出力オプション> update <サブモジュールの更新方法> <オプション> <ワーキングディレクトリーのパス>
情報出力オプション
情報の出力に関するオプションです。いずれのオプションも省略できます。
エラーメッセージのみ出力する(-q, --quiet)
このオプションを指定すると、エラーメッセージのみ出力します。サブモジュールの更新方法
「サブモジュール」の更新方法を指定します。サブモジュールをチェックアウトする(--checkout)
「サブモジュール」をチェックアウトします。このオプションの使用例は、「サブモジュールをチェックアウトする」を参考にしてください。
サブモジュールでマージを実行する(--merge)
「サブモジュール」の現在のブランチに、「コミットID」が指す「コミットオブジェクト」をマージします。このオプションの使用例は、「サブモジュールの現在のブランチに、コミットIDが指すコミットオブジェクトをマージする」を参考にしてください。
サブモジュールでリベースを実行する(--rebase)
「サブモジュール」の現在のブランチを、「コミットID」が指す「コミットオブジェクト」にリベースします。このオプションの使用例は、「サブモジュールの現在のブランチを、コミットIDが指すコミットオブジェクトにリベースする」を参考にしてください。
ユーザー定義のスクリプトを実行して、サブモジュールを更新する
ユーザーが指定したスクリプトを実行し、スクリプトから「サブモジュール」の操作を行います。使用例は、「ユーザー定義のスクリプトを実行して、サブモジュールを更新する」を参考にしてください。
更新方法を省略した場合
更新方法を省略した場合、「submodule.サブモジュール名.update」設定で指定した更新方法が採用されます。「submodule.サブモジュール名.update」が設定されていない場合、 「サブモジュール」のチェックアウトが実行されます。
サブモジュールの更新に関するオプション
「サブモジュール」の更新に関するオプションです。いずれのオプションも省略できます。
強制的にチェックアウトする(-f, --force)
チェックアウトできない状況でも、強制的にチェックアウトします。このオプションの使用例は、「サブモジュールを強制的にチェックアウトする」を参考にしてください。
再帰的にサブモジュールを操作する(--recursive)
デフォルトでは、「スーパープロジェクト」直下の「サブモジュール」が更新対象になります。このオプションを指定すると、「サブモジュール」内の「サブモジュール」など、再帰的に「サブモジュール」を更新対象にします。
このオプションの使用例は、「再帰的にサブモジュールを更新対象にする」を参考にしてください。
サブモジュールの初期化やクローンに関するオプション
「サブモジュール」の初期化やクローンに関するオプションです。すべての更新方法で利用できます。
また、いずれのオプションも省略できます。
サブモジュールを初期化する(--init)
「サブモジュール」を更新する前に、 「サブモジュール」の初期化を行います。このオプションの使用例は、「サブモジュールを初期化してから、サブモジュールを更新する」を参考にしてください。
参照リポジトリーを指定する(--reference)
「サブモジュール」をクローンする際、「Gitオブジェクト」を参照する「参照リポジトリー」を指定します。このオプションの使用例は、「サブモジュール初期化時に参照リポジトリーを指定して、サブモジュールを更新する」を参考にしてください。
シャロークローンを指定する(--depth)
「サブモジュール」をクローンする際、「シャロークローン」を行います。このオプションの使用例は、「サブモジュール初期化時にシャロークローンを指定して、サブモジュールを更新する」を参考にしてください。
コミットオブジェクトに関するオプション
「コミットオブジェクト」に関するオプションです。すべての更新方法で利用できます。
また、いずれのオプションも省略できます。
リモートトラッキングブランチを使用する(--remote)
デフォルトでは、「サブモジュール」更新時に「サブモジュール」で使用する「コミットオブジェクト」は、「コミットID」が指す「コミットオブジェクト」です。このオプションを利用すると、「コミットID」の代わりに「リモートトラッキングブランチ」が指す「コミットオブジェクト」を使用できます。
このオプションの使用例は、「コミットIDの代わりに、リモートトラッキングブランチを使用する」を参考にしてください。
フェッチを行わない(-N, --no-fetch)
「サブモジュール」更新前に、「サブモジュール」でフェッチを行いません。このオプションは「リモートトラッキングブランチを使用する」と組み合わせて使用します。
このオプションの使用例は、「フェッチを行わず、サブモジュールを更新する」を参考にしてください。
ワーキングディレクトリーのパス
更新対象にする「サブモジュール」の「ワーキングディレクトリー」のパスを指定します。ワーキングディレクトリーのパスを省略した場合
「ワーキングディレクトリー」のパスを省略した場合、すべての「サブモジュール」が更新対象になります。更新したいサブモジュールのみ指定することも可能
更新したい「サブモジュール」の「ワーキングディレクトリー」のパスを指定して、特定の「サブモジュール」のみ更新対象にすることも可能です。「ワーキングディレクトリー」のパスを指定する例は、「更新するサブモジュールを指定して、サブモジュールを更新する」を参考にしてください。