Godot4 Gitサブモジュール対応 アドオンを別リポジトリで管理する4/5

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

Godot4 Gitサブモジュール対応 アドオンを別リポジトリで管理するコンポーネント図 (plantUML)
Godot4 Gitサブモジュール対応 アドオンを別リポジトリで管理するフォルダ構成1

パート4では、自作アドオンを開発するための GodotEngine4 プロジェクトフォルダに、アドオンのリモートリポジトリからサブモジュールを配置します。

これにより、開発用のテストコードなどは自作アドオン開発プロジェクト用のリポジトリに、自作アドオン自体別のリポジトリで管理され、利用者は自作アドオンのみを取得できるように、利用と開発の目的ごとにリポジトリを分けてバージョン管理できます。

前回の記事

GodotEngine プロジェクトフォルダ内に Git サブモジュールを配置

TortoiseGit でローカルリポジトリにサブモジュールを追加するには、ローカルリポジトリの作業ディレクトリをエクスプローラで開いて、右クリックして表示されるメニュー「TortoiseGit」→「サブモジュールの追加」を選択します。

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置1

PC 内のリモートリポジトリからサブモジュールを追加する際の設定

「サブモジュールの追加」ダイアログの

  • 「リポジトリ」項目に、リモートリポジトリのパス(例では PC 内のリモートリポジトリのフォルダパス)
  • 「パス」項目に、サブモジュールを配置するフォルダへのパス(作業ディレクトリ基準、例では addons/sc-util)

を指定します。

「Putty 鍵のロード」は使用しないのでチェックを外しました。

設定が済んだら OK ボタンを押します。

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置2

File 転送プロトコルの場合は許可が必要

リモートリポジトリが GitHub.com などにある場合は https, ftp 転送プロトコルを使用しますが、 PC 内にあるリモートリポジトリの場合は File 転送プロトコルが用いられます。

File 転送プロトコルは、 Git config で使用することを許可しないと、それを用いるサブモジュールの追加で以下のようにエラーが発生します。

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置3
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 (including file:// URLs, or local paths)
  • git: the anonymous git protocol over a direct TCP connection (or proxy, if configured)
  • ssh: git over ssh (including host:path syntax, ssh://, etc).
  • http: git over http, both “smart http” and “dumb http”. Note that this does not include https; 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 the git-remote-hg helper)

clone/fetch/push コマンドを使用してプロトコル で使用されるポリシーを設定します。利用可能なポリシーについては、上記のprotocol.allowを参照してください。

現在 git で使用されているプロトコル名は次のとおりです。

  • file: 任意のローカル ファイルベースのパス (file:// URL またはローカル パスを含む)
  • git: 直接 TCP 接続 (または設定されている場合はプロキシ) 経由の匿名 git プロトコル
  • ssh: ssh 経由の git (host:path 構文、ssh:// などを含む)。
  • http: http を介した git、「スマート http」と「ダム http」の両方。これには https は含まれないことに注意してください。両方を設定したい場合は、個別に設定する必要があります。
  • 外部ヘルパーはプロトコルによって名前が付けられます (例: git-remote-hg ヘルパーを許可するには hg を使用します)
Git – git-config Documentation と Google 翻訳
Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置4

git config --global protocol.file.allow で設定値を確認できます。空の場合は未設定許可されていません

git config --global protocol.file.allow alwaysFile 通信プロトコル許可します。

※ –global 未指定や、 –local で、ローカルの protocol.file.allow を always に設定しても、先ほどと同じエラーが起きるので、 –global を指定してグローバルの設定を変更してください。

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置7
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 に変更した後に、再び、「サブモジュールの追加」を実行します。

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置8

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

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置9
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
Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置10
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>

サブモジュールの追加で指定するパスの区切り文字は /

再び、サブモジュールを追加するローカルリポジトリの作業ディレクトリをエクスプローラで開いて、「サブモジュールの追加」を実行します。

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置11

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

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置12
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

区切り文字を / に修正した後に、再び「サブモジュールの追加」を実行します。

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置13

すでにサブモジュールのフォルダ内にファイルがある場合は削除

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

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置14
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)を削除してから、「サブモジュールの追加」を実行します。

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置15

.git 内にサブモジュールのリポジトリがある場合は削除

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

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置16
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/ 内部のサブモジュール用のリポジトリのフォルダを削除します。

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置17

GodotEngine4プロジェクトフォルダ内にサブモジュールを追加

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

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置18

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

Godot4 自作アドオンのリモートリポジトリを自作アドオン開発用リポジトリにサブモジュールとして配置19
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!

記事一覧 → 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をコピーしました