GodotEngine4 用の自作アドオンを開発するために、利用者が res://adddons フォルダなどに配置するアドオン部分 (ScUtil) と、それを開発するプロジェクト部分 (ScUtilDev) の2つの Git リポジトリを作成し、それらを Git サブモジュールで連携してバージョン管理する構成を作成します。
※基本的に Git 操作は、シェル拡張でエクスプローラ上で操作できる Git クライアントソフト TortoiseGit を用い、一部はコマンドプロンプトで直接 Git コマンドを使用します。
※ Git-2.49.0 (64 bit) を使用します。
※ TortoiseGit-2.17.0.2-64bit を使用します。


パート4では、自作アドオンを開発するための GodotEngine4 プロジェクトフォルダに、アドオンのリモートリポジトリからサブモジュールを配置します。
これにより、開発用のテストコードなどは自作アドオン開発プロジェクト用のリポジトリに、自作アドオン自体は別のリポジトリで管理され、利用者は自作アドオンのみを取得できるように、利用と開発の目的ごとにリポジトリを分けてバージョン管理できます。
前回の記事
GodotEngine プロジェクトフォルダ内に Git サブモジュールを配置
TortoiseGit でローカルリポジトリにサブモジュールを追加するには、ローカルリポジトリの作業ディレクトリをエクスプローラで開いて、右クリックして表示されるメニュー「TortoiseGit」→「サブモジュールの追加」を選択します。

PC 内のリモートリポジトリからサブモジュールを追加する際の設定
「サブモジュールの追加」ダイアログの
- 「リポジトリ」項目に、リモートリポジトリのパス(例では PC 内のリモートリポジトリのフォルダパス)
- 「パス」項目に、サブモジュールを配置するフォルダへのパス(作業ディレクトリ基準、例では addons/sc-util)
を指定します。
「Putty 鍵のロード」は使用しないのでチェックを外しました。
設定が済んだら OK ボタンを押します。

File 転送プロトコルの場合は許可が必要
リモートリポジトリが GitHub.com などにある場合は https, ftp 転送プロトコルを使用しますが、 PC 内にあるリモートリポジトリの場合は File 転送プロトコルが用いられます。
File 転送プロトコルは、 Git config で使用することを許可しないと、それを用いるサブモジュールの追加で以下のようにエラーが発生します。

git.exe submodule add -- "G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-util.git" "addons/sc-util"
Cloning into 'G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/ScUtilDev/addons/sc-util'...
fatal: transport 'file' not allowed
fatal: clone of 'G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-util.git' into submodule path 'G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/ScUtilDev/addons/sc-util' failed
gitは正常に終了しませんでした (終了コード 128) (1125 ms @ 2025/09/07 15:49:57)
コマンドプロンプトを開き、サブモジュールを追加するローカルリポジトリの作業ディレクトリに移動します。
※ Windows 10 の場合は、そのフォルダを開いたエクスプローラのアドレスバーで cmd⏎ と入力するとコマンドプロンプトが開きます。
その後、 git config コマンドで protocol.file.allow の設定を未設定(空)から always に変更します。
protocol.<name>.allow
Set a policy to be used by protocol <name> with clone/fetch/push commands. See
protocol.allow
above for the available policies.The protocol names currently used by git are:
file
: any local file-based path (includingfile://
URLs, or local paths)git
: the anonymous git protocol over a direct TCP connection (or proxy, if configured)ssh
: git over ssh (includinghost:path
syntax,ssh://
, etc).http
: git over http, both “smart http” and “dumb http”. Note that this does not includehttps
; if you want to configure both, you must do so individually.- any external helpers are named by their protocol (e.g., use
hg
to allow thegit-remote-hg
helper)clone/fetch/push コマンドを使用してプロトコル で使用されるポリシーを設定します。利用可能なポリシーについては、上記のprotocol.allowを参照してください。
現在 git で使用されているプロトコル名は次のとおりです。
Git – git-config Documentation と Google 翻訳
- file: 任意のローカル ファイルベースのパス (file:// URL またはローカル パスを含む)
- git: 直接 TCP 接続 (または設定されている場合はプロキシ) 経由の匿名 git プロトコル
- ssh: ssh 経由の git (host:path 構文、ssh:// などを含む)。
- http: http を介した git、「スマート http」と「ダム http」の両方。これには https は含まれないことに注意してください。両方を設定したい場合は、個別に設定する必要があります。
- 外部ヘルパーはプロトコルによって名前が付けられます (例: git-remote-hg ヘルパーを許可するには hg を使用します)

git config --global protocol.file.allow
で設定値を確認できます。空の場合は未設定で許可されていません。
git config --global protocol.file.allow always
で File 通信プロトコルを許可します。
※ –global 未指定や、 –local で、ローカルの protocol.file.allow を always に設定しても、先ほどと同じエラーが起きるので、 –global を指定してグローバルの設定を変更してください。

G:\Dev\Godot4GD\SakuraCrowd\ScLibProject\ScUtilDev>git config --global protocol.file.allow
G:\Dev\Godot4GD\SakuraCrowd\ScLibProject\ScUtilDev>git config --global protocol.file.allow always
G:\Dev\Godot4GD\SakuraCrowd\ScLibProject\ScUtilDev>git config --global protocol.file.allow
always
サブモジュールを追加する際のリモートリポジトリの設定
File 通信プロトコルのグローバルの設定を always に変更した後に、再び、「サブモジュールの追加」を実行します。

以下のようなエラーが発生した場合は、リモートリポジトリの HEAD が有効な参照を指していない可能性があるので、リモートリポジトリの設定を確認します。

git.exe submodule add -- "G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-util.git" "addons/sc-util"
Cloning into 'G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/ScUtilDev/addons/sc-util'...
done.
fatal: You are on a branch yet to be born
fatal: unable to checkout submodule 'addons/sc-util'
gitは正常に終了しませんでした (終了コード 128) (1296 ms @ 2025/09/07 15:55:28)
リモートリポジトリのフォルダの HEAD ファイルに記載されている参照の文字列を type コマンドで確認します。
type HEAD
例では refs/heads/master という、存在しないブランチが表示されました。
ブランチは、 git branch コマンドで確認できます。例では develop が表示されました。
また、 git show-ref コマンドを実行すると refs/heads/develop のハッシュ値が表示され、 develop が有効なブランチであることが確認できます。
有効なブランチを HEAD に参照させるために、 echo コマンドで HEAD ファイルの中身を以下のように上書きします。
echo ref: refs/heads/develop > HEAD

G:\Dev\Godot4GD\SakuraCrowd\ScLibProject\remote\sc-util.git>type HEAD
ref: refs/heads/master
G:\Dev\Godot4GD\SakuraCrowd\ScLibProject\remote\sc-util.git>git branch
develop
G:\Dev\Godot4GD\SakuraCrowd\ScLibProject\remote\sc-util.git>echo ref: refs/heads/develop > HEAD
G:\Dev\Godot4GD\SakuraCrowd\ScLibProject\remote\sc-util.git>type HEAD
ref: refs/heads/develop
G:\Dev\Godot4GD\SakuraCrowd\ScLibProject\remote\sc-util.git>git show-ref
5648444d91867363b6fae0a1a0fb8cbf0dfe0d56 refs/heads/develop
G:\Dev\Godot4GD\SakuraCrowd\ScLibProject\remote\sc-util.git>
サブモジュールの追加で指定するパスの区切り文字は /
再び、サブモジュールを追加するローカルリポジトリの作業ディレクトリをエクスプローラで開いて、「サブモジュールの追加」を実行します。

以下のようなエラーが発生した場合は、「サブモジュールの追加」ダイアログで指定するパスの区切り文字が \ でないかを確認しましょう。

git.exe submodule add -- "G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-util.git" "addons/sc-util"
fatal: 'addons/sc-util' does not have a commit checked out
gitは正常に終了しませんでした (終了コード 128) (1031 ms @ 2025/09/07 16:01:26)
「リポジトリ」項目と「パス」項目のそれぞれのパスの区切り文字を \ から / に変更します。
※「パス」項目は \ が区切り文字でも問題ないかもしれません。
G:\Dev\Godot4GD\SakuraCrowd\ScLibProject\remote\sc-util.git
↓(区切り文字を \ から / に変更)
G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-util.git
addons\sc-util
↓(区切り文字を \ から / に変更)
addons/sc-util
区切り文字を / に修正した後に、再び「サブモジュールの追加」を実行します。

すでにサブモジュールのフォルダ内にファイルがある場合は削除
以下のようなエラーが発生した場合は、サブモジュールの追加を行うフォルダ内にファイルがないか確認しましょう。

git.exe submodule add -- "G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-util.git" "addons/sc-util"
fatal: 'addons/sc-util' does not have a commit checked out
gitは正常に終了しませんでした (終了コード 128) (1031 ms @ 2025/09/07 16:04:14)
すでに .git ファイルだけ置いてあるサブモジュール配置先のフォルダ(例:sc-util)を削除してから、「サブモジュールの追加」を実行します。

.git 内にサブモジュールのリポジトリがある場合は削除
再び「サブモジュールの追加」を行って、以下のようなエラーが発生した場合は、 .git/modules/ フォルダ内に、サブモジュールのリポジトリのフォルダがないか確認しましょう。

git.exe submodule add -- "G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-util.git" "addons/sc-util"
fatal: A git directory for 'addons/sc-util' is found locally with remote(s):
origin G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-util.git
If you want to reuse this local git directory instead of cloning again from
G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-util.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
gitは正常に終了しませんでした (終了コード 128) (1109 ms @ 2025/09/07 16:08:18)
.git/modules/ 内部のサブモジュール用のリポジトリのフォルダを削除します。

GodotEngine4プロジェクトフォルダ内にサブモジュールを追加
再び「サブモジュールの追加」を実行します。
※前述のログにあるように強制 (–force) オプションをつければ、削除する必要はないかもしれません。

PC 内のリモートリポジトリを、 GodotEngine4 プロジェクトのサブフォルダにサブモジュールとして追加できました。

git.exe submodule add -- "G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/remote/sc-util.git" "addons/sc-util"
Cloning into 'G:/Dev/Godot4GD/SakuraCrowd/ScLibProject/ScUtilDev/addons/sc-util'...
done.
成功 (1422 ms @ 2025/09/07 16:10:26)
まとめ
- GodotEngine4 プロジェクトフォルダに作成したローカルリポジトリに、 PC 内のリモートリポジトリからサブモジュールを追加しました。
- PC 内のリモートリポジトリからサブモジュールを追加する際は、 git config のグローバルの設定で File 転送プロトコルを許可する必要があります。
- リモートリポジトリの HEAD の設定が無効な場合は、HEAD の設定を有効な参照に変更する必要があります。
- すでにサブモジュールの追加先のフォルダにファイルがある場合は、削除してから、サブモジュールの追加を行います。
- すでにサブモジュールのリポジトリが .git/modules/ にある場合は削除してから、サブモジュールの追加を行います。
参照サイト Thank You!
- Git
- Git – サブモジュール
- Git – git-config Documentation
- TortoiseGit – Windows Shell Interface to Git
- Godot Engine – 無料でオープンソースの2D・3Dゲームエンジン
記事一覧 → Compota-Soft-Press
コメント