假设Project X是基础项目,而Project Y依赖于X. Project Y可能是Project X的插件,或者它可能是一个独立的应用程序,需要Project X以其他方式。
我一直以为项目Y应该是超级项目,而项目X应该是项目Y的子模块。
然而,在阅读this后,似乎我的想法可能会被颠倒过来。在本文中,依赖项是超级项目,依赖代码(在本例中为插件)是子模块。这是使用子模块的正确方法吗?
答案 0 :(得分:3)
这取决于,但在一般情况下,我会说两个子模块都是(或可以)。
显然,如果Project Y是Project X的依赖项(例如,外部库),它应该是一个子模块。
但子模块不仅适用于依赖项,而且适用于作为半独立开发的项目组件的项目。插件就是这样一个组件:它是独立开发的,但您可能希望将其与项目源一起打包。
答案 1 :(得分:2)
如果ProjectY可以在不知道任何关于ProjectX的情况下生活(可能是它是X的插件),它不能是一个超级项目。
如果它需要X以某种方式完成,那么是的,它可能是一个超级项目,以便在其树中引用X(如true nature of submodules中所述)。
在component-based approach中,真正的超级项目将是第三个项目,它引用正确版本的ProjectY 和 ProjectX,以便记录所需的确切配置(即修订列表)整个项目的工作。
OP添加了正确的问题:在哪里存储依赖关系(Y在X上)?
如果采用基于组件的方法并且具有ProjectZ超级项目,并且ProjectY依赖于ProjectX来构建,那么我们是不是将ProjectX作为子模块包含在ProjectY的存储库中,而只包含在ProjectZ中? 这意味着ProjectY无法自行构建,使其(缺乏口才)成为一种“隐含的子模块”。
如果你只有2个组件,一个取决于另一个组件,请确保:你可以直接将ProjectX声明为ProjectY的子模块。
但是如果ProjectY不能单独构建,那么它无论如何都不是“完整的”(如“自主”)项目。
因此,全局父“ProjectZ”将ProjectY之外的依赖信息存储在其中具有以下优点: