是否可以从顶级 git 存储库向子模块添加子模块?

Is it possible to add a submodule to a submodule from the top-level git repository?

我正在从事一些使用开源 Godot 引擎的游戏开发项目,该引擎支持模块和附加脚本。

我们的团队管理项目的 Git 存储库,以及一些自定义引擎模块和附加脚本 Git 存储库,但我们不一定要维护自己的分支如果没有必要,请为每个项目添加引擎。这是基本结构:

/project/project.git                              [The project repo. We maintain it.]

/project/engine/engine.git                        [Open-source engine repo. Submodule. We prefer to not maintain a fork if not needed.]

/project/engine/modules/my-module/my-module.git   [One of our custom engine module repos. Submodule. We maintain them.]

换句话说,我们想要做的是在 /project/engine 将上游引擎作为子模块添加到我们的每个项目中。然后我们想在 /project/engine/modules/ 下向引擎添加各种模块,但是 作为顶级项目 repo 的子模块而不是引擎 repo。

(我们的想法是,在许多项目中,我们可以简单地附加未修改的上游 Godot 存储库目录,然后通过附加模块和附加组件向引擎添加功能。每个顶级项目都是负责管理它需要的特定引擎、模块和附加组件。因此,我们可以减少需要维护的引擎分支或分支的数量,将其保存为模块和插件的最后手段无法使用插件。)

到目前为止我们 运行 遇到的问题是,一旦我们将引擎添加为项目的子模块(在 /project/engine),我们似乎无法从顶级“超级项目”添加另一个嵌套子模块(例如 /project/engine/modules/my-module),我认为是因为目标路径存在于引擎的子模块中。我们希望项目代表引擎附加一个子模块,以便项目负责更改但是...

这不可能吗?没有办法将子模块添加到顶级项目存储库,该子模块的目标路径存在于其子模块之一中吗?

如果有更好的方法来管理这种设置,我愿意接受其他建议,尽管我觉得我们已经面临过度设计我们的回购结构的风险。

如果您的项目在 GitHub 或 self-hosted Bitbucket 上,那么您可以使用 Git X-Modules App - 它支持嵌套模块,并具有一些其他功能Git 子模块没有(例如仅将存储库中的指定目录添加为模块等)。