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



我正在进行一些使用开源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/下向引擎添加各种模块,但作为顶级项目回购的子模块,而不是引擎回购

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

到目前为止,我们遇到的问题是,一旦我们将引擎添加为项目的子模块(在/project/engine(,我们似乎就无法从顶层"添加另一个嵌套子模块(例如在/project/engine/modules/my-module(;超级项目";,我认为这是因为目标路径存在于发动机的子模块内部。我们希望项目代表引擎附加一个子模块,以便项目负责更改,但。。。

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

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

如果你的项目在GitHub或自托管的Bitbucket上,那么你可以用Git X-Modules应用程序来完成它——它支持嵌套模块,并且有一些Git子模块没有的其他功能(比如只在存储库中添加一个指定的目录作为模块,等等(。

最新更新