我们正在迁移到Git。我们有大量的模块组成我们的产品,其中一些模块是在产品之间共享的。产品由一个“薄”超级仓库(ssh://server/product.git)表示,它只包含子模块:
[submodule "module1"]
path=module1
url=ssh://server/product/module1.git
[submodule "module2"]
path=module2
url=ssh://server/product/module2.git
...
我可以克隆超级版本库并使用子模块来提交它们,然后提交子模块到超级版本库。但当我想引入另一层时就会出问题。有两种基本情况(这可以组合成更复杂的设置,但任何东西都应该是这些情况的组合):
1. 作为开发人员,我克隆了一个中央存储库并开始工作。然后我想在将我的更改合并到中央存储库之前将我的代码提交到我们的持续集成服务器上。我让CI服务器克隆我的repo。这行不通,CI服务器将克隆我的超级repo,然后从中央存储库位置克隆子模块(因为在.gitmodules中是这样写的)。
2. 作为团队,我们希望在将我们的代码合并到中央存储库之前,有一个集成存储库。由于同样的原因,这也失败了。
我尝试指定相对URL用于子模块,但这也行不通,因为当我们将第二层克隆到第三层时,相对URL相对于第二层存储库位置解析,但第二层子模块位置位于第二层超级存储库内。
我能同时拥有Git子模块和n层存储库结构吗?