TortoiseGit サブモジュールの変更をスーパープロジェクトに反映

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

TortoiseGit ダウンロードとインストール1

TortoiseGit-2.17.0.2-64bit を使用します。

前回の記事

前回は、TortoiseGit を用いて、リモートリポジトリの最新のタグ・コミット情報を、サブモジュール取得して、取得した最新のタグを指定してチェックアウトを行い、サブモジュール内の作業ディレクトリの内容をそのタグが指すコミットの状態に変更する手順を紹介しました。

サブモジュールのチェックアウトでタグを指定した情報のコミット・プッシュ

前回、サブモジュールにタグを指定したチェックアウトを行い、サブモジュール(例:sc-util)の作業ディレクトリの状態をそのタグが指すコミットの状態に変更しました。

タグを指定したことで、更新されるリモートリポジトリの特定のコミット位置の状態をサブモジュールでは保つことができます。

そのサブモジュール(例:sc-util)のスーパープロジェクトである上位のローカルリポジトリのフォルダエクスプローラで開いて、「コミット」ダイアログを開くと、 Changes made リストに、サブモジュールのフォルダがチェックされています。
これは、フォルダ自体ではなく対応したサブモジュールの情報の変更を意味しています。

メッセージにコミットの説明を入力して「コミット」ボタンを押します。
※「コミット」ダイアログは、エクスプローラで右クリックして表示されるメニュー「Git コミット -> “ブランチ名”」で開けます。

TortoiseGit サブモジュールがタグを指定してチェックアウトする情報のコミットとプッシュ1

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

TortoiseGit サブモジュールがタグを指定してチェックアウトする情報のコミットとプッシュ2
[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 ボタンを押します。

TortoiseGit サブモジュールがタグを指定してチェックアウトする情報のコミットとプッシュ3

「タグを含める」(git push の –tags オプション)をチェックしないと、プッシュではタグは扱われません

タグの共有

デフォルトでは、git push コマンドはタグ情報をリモートに送りません。 タグを作ったら、タグをリモートサーバーにプッシュするよう明示する必要があります。 その方法は、リモートブランチを共有するときと似ています。 git push origin [tagname] を実行するのです。

Git – タグ

–tags

All refs under refs/tags are pushed, in addition to refspecs explicitly listed on the command line.

コマンドラインに明示的にリストされている refspec に加えて、refs/tags の下にあるすべての refs がプッシュされます

Git – git-push Documentation と Google 翻訳

スーパープロジェクトのリモートリポジトリへのプッシュタグを含む)が完了しました。

TortoiseGit サブモジュールがタグを指定してチェックアウトする情報のコミットとプッシュ4
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 サブモジュールがタグを指定してチェックアウトする情報のコミットとプッシュ5

サブモジュールをタグ指定でチェックアウトしたあとの差分の確認

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

TortoiseGit サブモジュールがタグを指定してチェックアウトする情報のコミットとプッシュ6

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

TortoiseGit サブモジュールがタグを指定してチェックアウトする情報のコミットとプッシュ7
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!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました