エクスプローラで Git 操作ができるクライアントソフト TortoiseGit を用いて、サブモジュールがチェックアウトするコミット位置やタグを変更したことを、スーパープロジェクト(サブモジュールから見た上位のプロジェクト)にコミットし、スーパープロジェクトのリモートリポジトリへプッシュする手順を紹介します。

※ TortoiseGit-2.17.0.2-64bit を使用します。
前回の記事
前回は、TortoiseGit を用いて、リモートリポジトリの最新のタグ・コミット情報を、サブモジュールに取得して、取得した最新のタグを指定してチェックアウトを行い、サブモジュール内の作業ディレクトリの内容をそのタグが指すコミットの状態に変更する手順を紹介しました。
サブモジュールのチェックアウトでタグを指定した情報のコミット・プッシュ
前回、サブモジュールにタグを指定したチェックアウトを行い、サブモジュール(例:sc-util)の作業ディレクトリの状態をそのタグが指すコミットの状態に変更しました。
タグを指定したことで、更新されるリモートリポジトリの特定のコミット位置の状態をサブモジュールでは保つことができます。
そのサブモジュール(例:sc-util)のスーパープロジェクトである上位のローカルリポジトリのフォルダをエクスプローラで開いて、「コミット」ダイアログを開くと、 Changes made リストに、サブモジュールのフォルダがチェックされています。
これは、フォルダ自体ではなく対応したサブモジュールの情報の変更を意味しています。
メッセージにコミットの説明を入力して「コミット」ボタンを押します。
※「コミット」ダイアログは、エクスプローラで右クリックして表示されるメニュー「Git コミット -> “ブランチ名”」で開けます。

スーパープロジェクトのローカルリポジトリへのコミットが完了しました。
続けて、スーパープロジェクトに対応するリモートリポジトリにプッシュするので「プッシュ」ボタンを押します。
※閉じた場合は、エクスプローラで右クリックして表示されるメニュー「TortoiseGit」→「プッシュ」を選択してください。

[develop 17f5df9] サブモジュール sc-util をタグ v0.1.0 を指定してチェックアウトする情報をコミットします。
1 file changed, 1 insertion(+), 1 deletion(-)
成功 (250 ms @ 2025/09/11 17:00:10)
「プッシュ」ダイアログで
「 Ref 」枠でプッシュに用いるローカルとリモートの各ブランチ名を入力し、
「宛先」枠でプッシュ先の URL を指定したリモート名を選択し、
※リモートの選択肢は、メニュー「TortoieseGit」→「設定」の「Git」→「リモート」のページで、リモート(名前)と URL を指定して作成できます。
「オプション」枠で「タグを含める」にチェックを入れて
設定が済んだら OK ボタンを押します。

「タグを含める」(git push の –tags オプション)をチェックしないと、プッシュではタグは扱われません。
タグの共有
デフォルトでは、
Git – タグgit pushコマンドはタグ情報をリモートに送りません。 タグを作ったら、タグをリモートサーバーにプッシュするよう明示する必要があります。 その方法は、リモートブランチを共有するときと似ています。git push origin [tagname]を実行するのです。
–tags
All refs under
refs/tagsare pushed, in addition to refspecs explicitly listed on the command line.コマンドラインに明示的にリストされている refspec に加えて、refs/tags の下にあるすべての refs がプッシュされます。
Git – git-push Documentation と Google 翻訳
スーパープロジェクトのリモートリポジトリへのプッシュ(タグを含む)が完了しました。

git.exe push --tags --progress -- "origin" develop:develop
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 372 bytes | 372.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
To G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-fit-font-size.git
280dde1..17f5df9 develop -> develop
成功 (578 ms @ 2025/09/11 17:02:05)
プッシュ先のリモートリポジトリのフォルダをエクスプローラで開いて、「ログメッセージ」ダイアログを表示すると、プッシュの内容が確認できます。
※「ログメッセージ」ダイアログは、リポジトリのフォルダをエクスプローラで開いて、右クリックで表示されるメニュー「TortoiseGit」→「ログを表示」で表示できます。

サブモジュールをタグ指定でチェックアウトしたあとの差分の確認
プッシュ先のリモートリポジトリの「ログメッセージ」ダイアログで、プッシュしたメッセージを右クリックして表示されるメニュー「直前のリビジョンと比較」を選択します。
※「ログメッセージ」ダイアログは、リポジトリのフォルダをエクスプローラで開いて、右クリックで表示されるメニュー「TortoiseGit」→「ログを表示」で表示できます。

右下の「パッチを表示」リンクをクリックすると、右側に「パッチを表示」ダイアログが表示されます。
そこに書かれている差分は、サブモジュールが指すコミットを一意に表すハッシュ値だけでした。

diff --git a/sc-util b/sc-util
index 5648444..4574776 160000
--- a/sc-util
+++ b/sc-util
@@ -1 +1 @@
-Subproject commit 5648444d91867363b6fae0a1a0fb8cbf0dfe0d56
+Subproject commit 4574776e4f116179d1093ee32078ce3f2bbf39dbこのハッシュ値(SHA-1)は、サブモジュールのタグ指定によるチェックアウト前のコミットのハッシュ値と、新たにタグを指定してチェックアウトした後の別のコミットを表すハッシュ値でした。
これにより、サブモジュールのチェックアウト先の変更のコミットとプッシュを確認できました。
※下図2枚は、サブモジュールのチェックアウト前後のコミットのログメッセージです。中央の SHA-1 のあとのハッシュ値が先ほどの差分と一致します。


まとめ
- TortoiseGit を用いて、サブモジュールのチェックアウト先の変更を、スーパープロジェクト(サブモジュールを持つ上位のリポジトリ)でコミットして、対応するリモートリポジトリにプッシュしました。
- リモートリポジトリの「ログメッセージ」ダイアログと「パッチを表示」ダイアログで、サブモジュールの差分を表示して、チェックアウト前後のコミットのハッシュ値(SHA-1) が変わったことを確認しました。
参照サイト Thank You!
- Git
- Git – git-submodule Documentation
- Git – サブモジュール
- Git – タグ
- Git – git-push Documentation
- TortoiseGit – Windows Shell Interface to Git
記事一覧 → Compota-Soft-Press

コメント