エクスプローラで Git 操作ができるクライアントソフト TortoiseGit を用いて、リモートリポジトリの最新のタグ・コミット情報を、サブモジュールに取得して、取得した最新のタグを指定してチェックアウトを行い、サブモジュール内の作業ディレクトリの内容をそのタグが指すコミットの状態に変更する手順を紹介します。

※ TortoiseGit-2.17.0.2-64bit を使用します。
前回の記事
前回は、 TortoiseGit を用いて、ローカルリポジトリの現在のブランチの最新の状態にタグを作成して、それをリモートリポジトリにプッシュする手順を紹介しました。
サブモジュールのリポジトリにリモートリポジトリ最新情報を取得
リモートリポジトリにプッシュされた最新のコミットやタグは、それより前にリポジトリに追加したそのリモートリポジトリのサブモジュールには共有されません。
例えば、サブモジュールを追加した後、追加元のリモートリポジトリに新たなコミットとタグをプッシュしても、その新たな情報はサブモジュールには無いので、チェックアウトで選択するタグのリストにも表示されません。

リモートリポジトリの最新のコミットやタグの情報を、ローカルリポジトリやサブモジュールで扱うためには、git fetch コマンドでリモートリポジトリの最新の情報をローカルリポジトリやサブモジュールで取得する必要があります。
Fetch branches and/or tags (collectively, “refs”) from one or more other repositories, along with the objects necessary to complete their histories. Remote-tracking branches are updated (see the description of <refspec> below for ways to control this behavior).
履歴を完了するために必要なオブジェクトとともに、1 つ以上の他のリポジトリからブランチやタグ (総称して「ref」) を取得します。リモート追跡ブランチが更新されます (この動作を制御する方法については、以下の の説明を参照してください)。
-v –verbose
Be verbose.
冗長になります。–progress
Progress status is reported on the standard error stream by default when it is attached to a terminal, unless -q is specified. This flag forces progress status even if the standard error stream is not directed to a terminal.-q が指定されていない限り、端末に接続すると、デフォルトで進行状況が標準エラー ストリームで報告されます。このフラグは、標準エラー ストリームが端末に向けられていない場合でも、進行状況ステータスを強制します。
Git – git-fetch Documentation と Google 翻訳
git fetch コマンドを TortoiseGit で実行する場合は、取得先のローカルリポジトリ・サブモジュールのフォルダをエクスプローラで開いて、右クリックで表示されるメニュー「TortoiseGit」→「フェッチ」を選択します。
表示された「フェッチ」ダイアログで、「リモート」枠の「リモート」項目で、取得元のリモートリポジトリを指すリモートを選択します。
※リモートの選択肢は、メニュー「TortoieseGit」→「設定」の「Git」→「リモート」のページで、リモート(名前)と URL を指定して作成できます。
「オプション」枠では「タグ」にチェックが入っていることを確認します。
設定が済んだら OK ボタンを押します。

git.exe fetch -v --progress -- "origin"
上記の git fetch コマンドが成功して、リモートリポジトリの最新の状態を、ローカルリポジトリ・サブモジュールに取得できました。
※ origin は設定で作成したリモートの名前です。

git.exe fetch -v --progress -- "origin"
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
From G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-util
5648444..4574776 develop -> origin/develop
* [new tag] v0.1.0 -> v0.1.0
成功 (515 ms @ 2025/09/11 16:52:15)
取得先のサブモジュールのリポジトリは、サブモジュールを持つスーパープロジェクト(サブモジュールから見た上位のプロジェクト)のリポジトリの .git/modules/ 内にあります。

タグ情報を指定してチェックアウト
フェッチによって、リモートリポジトリから最新のコミットやタグの情報を取得したサブモジュールで、再び TortoiseGit の「切り替え / チェックアウト」ダイアログを表示して、「切り替え先」枠の「タグ」項目のリストを開くと、サブモジュールを追加したあとにリモートリポジトリに追加された、最新のタグが選択できるようになりました。
※「切り替え / チェックアウト」ダイアログは、ローカルリポジトリ・サブモジュールのフォルダをエクスプローラで開いて、右クリックで表示されるメニュー「TortoiseGit」→「切り替え / チェックアウト」で表示できます。
「タグ」ラジオボタンを選択して、右側のリストでタグ名(例:v0.1.0)を選択して OK ボタンを押します。

git checkout コマンドが実行され、そのタグが指すコミットの状態に、作業ディレクトリが変わりました。

git.exe checkout --end-of-options v0.1.0 --
Note: switching to 'v0.1.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at 4574776 複数配置される想定の本ファイルから class_name を除去してグローバルクラス名の競合を回避します。 内部クラスのメンバ関数から、グローバル関数を呼ぶために、本ファイル自身を preload した const Impl 変数を定義しました。
成功 (110 ms @ 2025/09/11 16:53:59)
Updates files in the working tree to match the version in the index or the specified tree. If no pathspec was given,
gitcheckoutwill also updateHEADto set the specified branch as the current branch.作業ツリー内のファイルを更新して、インデックスまたは指定されたツリー内のバージョンと一致させます。 pathspec が指定されていない場合、git checkout は HEAD も更新して、指定されたブランチを現在のブランチとして設定します。
Git – git-checkout Documentation と Google 翻訳
タグを指定したチェックアウトの後のサブモジュールの確認
タグを指定したチェックアウトを行ったサブモジュールを TortoiseGit の「リビジョングラフ」ダイアログを表示すると、サブモジュールにチェックアウトで選択したタグ名(例:v0.1.0)が表示されました。
※「リビジョングラフ」ダイアログは、ローカルリポジトリ・サブモジュールのフォルダをエクスプローラで開いて、右クリックで表示されるメニュー「TortoiseGit」→「リビジョングラフ」で表示できます。

これにより、更新されるリモートリポジトリの、常に特定のコミット位置の状態をサブモジュールでは保つことができます。
まとめ
- リモートリポジトリの最新の状態(コミット・タグ)を、ローカルリポジトリ・サブモジュールに TortoiseGit の「フェッチ」ダイアログ(git fetch コマンド)を使って取得しました。
- フェッチ後、サブモジュールで選択できるようになったタグを用いて TortoiseGit の「チェックアウト」ダイアログ(git checkout コマンド)でチェックアウトして、そのタグが指す状態に作業ディレクトリを変更しました。
- TortoiseGit の「リビジョングラフ」で、チェックアウトしたタグ名が表示されていることを確認しました。
参照サイト Thank You!
- Git
- Git – git-submodule Documentation
- Git – サブモジュール
- Git – git-fetch Documentation
- Git – git-checkout Documentation
- TortoiseGit – Windows Shell Interface to Git
記事一覧 → Compota-Soft-Press

コメント