コミットIDの代わりに、リモートトラッキングブランチを使用する
デフォルトでは、「サブモジュール」更新時に「サブモジュール」で使用する「コミットオブジェクト」は、「コミットID」が指す「コミットオブジェクト」です。「コミットID」の代わりに「リモートトラッキングブランチ」が指す「コミットオブジェクト」を指定することもできます。
リモートトラッキングブランチの指定方法
「リモートトラッキングブランチ」の指定方法です。「リモートトラッキングブランチ」の指定は、設定ファイルに記述します。
設定ファイル
設定ファイルは、以下のいずれかです。- リポジトリーの設定ファイル(config)
- .gitmodulesファイル
両方の設定ファイルに「リモートトラッキングブランチ」の指定を記述した場合、「リポジトリーの設定ファイル(config)」に記述されている「リモートトラッキングブランチ」の指定が優先されます。
ブランチ名のみ指定する
設定ファイルに記述する「リモートトラッキングブランチ」は、ブランチ名のみ記述します。「リモートリポジトリー」名は記述しません。
「リモートリポジトリー」名は、「サブモジュール」の現在のブランチから自動的に取得されます。
リモートトラッキングブランチの指定を省略した場合
「リモートトラッキングブランチ」の指定を省略した場合、「master」が指定されます。フェッチが行われる
「リモートトラッキングブランチ」を更新してから「サブモジュール」の更新を行うため、事前に「サブモジュール」のフェッチが実行されます。オプションでフェッチを抑制することもできます。
1.リポジトリーの設定ファイル
リポジトリーの設定ファイルに記述する方法です。「config」ファイルに「リモートトラッキングブランチ」の指定を記述します。
「submodule.サブモジュール名.branch」設定にブランチ名を記述します。
例えば「master」ブランチを指定する場合、以下のように記述します。
2.gitmodules
「.gitmodules」ファイルに記述する方法です。「submodule.サブモジュール名.branch」設定にブランチ名を記述します。
例えば「master」ブランチを指定する場合、以下のように記述します。
コマンドの実行環境
ここでは、例として使用する環境を紹介します。1.サブモジュールのブランチの状態
「サブモジュール」のブランチの状態は、以下のようになっています。「HEAD」が指すブランチは「fix」ブランチなので、現在のブランチは「fix」ブランチであることが分かります。
2.コミットIDの確認
「サブモジュール」の「コミットID」は、以下のようになっています。3.サブモジュールのブランチとコミットIDの構成
「サブモジュール」のブランチと「コミットID」の構成を図にすると、以下のようになります。コミットIDを使用して、サブモジュールをチェックアウトする
比較のため、まずはデフォルトの動作である「コミットID」を使用して、「サブモジュール」をチェックアウトしてみます。1.サブモジュールのチェックアウト
「端末」から、以下のコマンドを実行します。コマンドの詳細は、「サブモジュールを更新するコマンドの説明」を参考にしてください。
git submodule update --checkout
2.サブモジュールのブランチの状態
「サブモジュール」チェックアウト後に「サブモジュール」のブランチの状態を見てみます。「分離したHEAD」が指す「コミットオブジェクト」の識別子と、「コミットID」が指す「コミットオブジェクト」の識別子が同じです。
リモートトラッキングブランチを使用して、サブモジュールをチェックアウトする
次に「リモートトラッキングブランチ」を使用して、「サブモジュール」をチェックアウトしてみます。指定する「リモートトラッキングブランチ」は、「origin/master」です。
1.コマンドの実行
コマンドのオプションは、以下のオプションを指定します。オプション |
---|
--remote |
「端末」から、以下のコマンドを実行します。
コマンドの詳細は、「サブモジュールを更新するコマンドの説明」を参考にしてください。
ポイントは、赤字の箇所です。
git submodule update --remote --checkout
2.コマンドの実行結果
以下のように、「リモートトラッキングブランチ」が指す「コミットオブジェクト」から、「サブモジュール」がチェックアウトされます。2.サブモジュールのブランチの状態
「サブモジュール」チェックアウト後に「サブモジュール」のブランチの状態を見てみます。「分離したHEAD」が指す「コミットオブジェクト」の識別子と、「origin/master」が指す「コミットオブジェクト」の識別子が同じです。