エクスプローラで Git 操作ができるクライアントソフト TortoiseGit を用いて、追加したサブモジュールを対応するリモートリポジトリの最新の状態に更新する手順を紹介します。
その後、サブモジュールが指すリビジョンの変更を、スーパープロジェクトにコミットし、スーパープロジェクトのリモートリポジトリにプッシュし、結果をハッシュ値(SHA-1)で確認します。

※ TortoiseGit-2.17.0.2-64bit を使用します。
サブモジュールの既定の更新ではリモートは反映されません
サブモジュールの更新(git submodule update コマンド)は、 –remote オプションを使用しない場合、ローカルのスーパープロジェクト(サブモジュールを持つ上位のリポジトリの作業ディレクトリ)のサブモジュール用のリポジトリを用いて更新します。
既定では、サブモジュール用のリポジトリの HEAD は、サブモジュール追加時のリビジョンを指しているので、サブモジュールの更新をしてもサブモジュールの追加時の状態になります。
–remote
This option is only valid for the update command. Instead of using the superproject’s recorded SHA-1 to update the submodule, use the status of the submodule’s remote-tracking branch. The remote used is branch’s remote (
branch.<name>.remote), defaulting toorigin. The remote branch used defaults to the remoteHEAD, but the branch name may be overridden by setting thesubmodule.<name>.branchoption in either.gitmodulesor.git/config(with.git/configtaking precedence).このオプションは更新コマンドに対してのみ有効です。スーパープロジェクトの記録された SHA-1 を使用してサブモジュールを更新する代わりに、サブモジュールのリモート追跡ブランチのステータスを使用します。使用されるリモートはブランチのリモート(branch..remote)で、デフォルトはoriginです。使用されるリモート ブランチはデフォルトでリモート HEAD になりますが、.gitmodules または .git/config のいずれかで submodule..branch オプションを設定することでブランチ名をオーバーライドできます(.git/config が優先されます)。
Git – git-submodule Documentation と Google 翻訳
詳しくは、次回の記事を参照してください。
TODO: 次回の記事
リモートリポジトリによるサブモジュールの更新
サブモジュールを更新するために、スーパープロジェクト(サブモジュールを持つ上位のリポジトリの作業ディレクトリ)をエクスプローラで開いて、右クリックで表示されるメニュー「TortoiseGit」→「サブモジュールのアップデート」を選択してダイアログを表示します。
※スーパープロジェクトのフォルダで「サブモジュールを更新」を行ってください。サブモジュールのフォルダで行うと、そのサブモジュール自身の更新が行われません。
–remote オプションを TortoiseGit の「サブモジュールを更新」ダイアログで指示するには「リモート追跡ブランチ」をチェックします。
他にも、サブモジュールがさらにサブモジュールを持つ場合は、「再帰的」にチェックをいれることで、下位のサブモジュールも更新されます。
「サブモジュールを初期化する」をチェックすると、サブモジュールが初期化されていない場合に初期化が行われます。
更新するサブモジュールを「パス」のリストから選び、設定が済んだら OK ボタンを押します。

サブモジュールの更新が成功しました。
※リモートリポジトリの最新のコミットにしか含まれない sc-util-editor サブモジュールも取得できました。

git.exe submodule update --progress --init --recursive --remote -- "addons/sc-fit-font-size"
Submodule path 'addons/sc-fit-font-size': checked out '1be13c2dce8a0d41cbb4f22a955c2dd68b9afe5b'
Submodule path 'addons/sc-fit-font-size/sc-util-editor': checked out '8a0011291de37ff26987f0b96906cfe882c0101f'
成功 (1750 ms @ 2025/09/13 18:11:13)
サブモジュールの更新をコミット
リモートリポジトリの HEAD が指す状態に更新したサブモジュール(例:sc-fit-font-size)は、スーパープロジェクトから見るとサブモジュールの参照するコミット位置(リビジョン)が変更されています。
このサブモジュールの参照するコミット位置(リビジョン)の変更を、スーパープロジェクトのローカルリポジトリにコミットします。
スーパープロジェクトのフォルダをエクスプローラで開いて、右クリックで表示されるメニュー「Git コミット -> “ブランチ名”」を選択して、コミットダイアログを開きます。
コミット先と Change made リストの変更内容がサブモジュールのフォルダパスであることを確認して、メッセージを入力してから、 OK ボタンを押してコミットします。

コミットダイアログの右下の「パッチを表示」リンクをクリックすると、サブモジュールの更新による変更部分を差分として確認できます。
差分は、更新したサブモジュールの指しているコミット位置(リビジョン)を表すハッシュ値(SHA-1)でした。

diff --git a/addons/sc-fit-font-size b/addons/sc-fit-font-size
index 17f5df9..1be13c2 160000
--- a/addons/sc-fit-font-size
+++ b/addons/sc-fit-font-size
@@ -1 +1 @@
-Subproject commit 17f5df952dacaf323b330bc77eff73d485c0cd0a
+Subproject commit 1be13c2dce8a0d41cbb4f22a955c2dd68b9afe5b
コミットが完了しました。
続けて、スーパープロジェクトのリモートリポジトリにプッシュしたい場合は「プッシュ」ボタンを押します。

[develop 712fb1d] sc-fit-font-size サブモジュールをリモートリポジトリの最新の状態に更新してコミット位置が変わったことをスーパープロジェクトにコミットします。
1 file changed, 1 insertion(+), 1 deletion(-)
成功 (344 ms @ 2025/09/13 18:15:01)
スーパープロジェクトのコミットをリモートリポジトリへプッシュ
引き続き、スーパープロジェクトのリモートリポジトリにプッシュします。
一度閉じた場合は、スーパープロジェクトのフォルダをエクスプローラで開いて、右クリックで表示されるメニュー「TortoiseGit」→「プッシュ」を選択します。
「プッシュ」ダイアログの
- 「 Ref 」枠で、プッシュ元の「ローカル」とプッシュ先の「リモート」の項目に、それぞれのブランチ名を入力します。
- 「宛先」枠で、「リモート」ラジオボタンを選択して、リストからプッシュ先のリモート名を選択します。
※リモートの選択肢は、右側の「管理」ボタンで開く「設定」ダイアログの「Git」→「リモート」のページで、リモート(名前)と URL を指定して作成できます。 - 「オプション」枠は、今回は使用しないので全てオフにしました。
設定が済んだら OK ボタンでプッシュします。

スーパープロジェクトのリモートリポジトリに、サブモジュールの更新によるコミット位置の変更のコミットをプッシュしました。

git.exe push --progress -- "origin" develop:develop
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 528 bytes | 528.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
To G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-fit-font-size-dev.git
bb5e552..712fb1d develop -> develop
成功 (578 ms @ 2025/09/13 18:15:46)
プッシュしたサブモジュールの変更内容を確認
プッシュの結果を確認します。
PC 内にあるリモートリポジトリをエクスプローラで開いて、右クリックで表示されるメニュー「TortoiseGit」→「リポジトリブラウザー」を選択してダイアログを表示します。
「リポジトリブラウザー」ダイアログで、サブモジュールのあるフォルダを選択してウィンドウの右側に表示します。
表示されたサブモジュール(例:sc-fit-font-size)を選択すると下側に、サブモジュールが参照するリビジョン(コミット位置)を表す 1be13c から始まるハッシュ値(SHA-1)が表示されています。

次に、同じリモートリポジトリのフォルダのエクスプローラで、右クリックして表示されるメニュー「TortosieGit」→「ログを表示」を選択します。
「ログメッセージ」ダイアログの上部のリストで最新のコミットのメッセージを選択すると、中央のテキストエリアに SHA-1: から始まるコミットを表す 1be13c から始まるハッシュ値が表示されました。
サブモジュールの参照が指すハッシュ値と、リモートリポジトリの HEAD が指すハッシュ値が一致していることから、サブモジュールがリモートリポジトリの最新の状態に更新されたことが確認できました。

まとめ
- TortoiseGit の「サブモジュールを更新」ダイアログを用いて、サブモジュールを対応するリモートリポジトリの HEAD が指す最新の状態に更新しました。
- サブモジュールの更新で、リモートリポジトリの状態にするには「リモート追跡ブランチ」(–remote オプション)をチェックする必要があります。
- –remote オプションでサブモジュールを更新後、サブモジュールの指すリビジョンの変更をスーパープロジェクトにコミットし、スーパープロジェクトのリモートリポジトリへプッシュしました。
- プッシュしたリモートリポジトリで、更新したサブモジュールのリビジョンのハッシュ値と、リモートリポジトリの最新のコミットのハッシュ値が一致していることを確認しました。
参照サイト Thank You!
記事一覧 → Compota-Soft-Press
コメント