我们正在迁移到 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
...
我可以克隆超级存储库并使用子模块并提交它们,然后将子模块提交到超级存储库。
当我想介绍另一层时,问题就来了。有两种基本场景(这可以结合起来进行更复杂的设置,但任何东西都应该是这些的组合):
作为开发人员,我克隆了一个中央存储库并开始工作。然后我想在将我的更改合并到中央存储库之前将我的代码提交到我们的持续集成服务器。我让 CI 服务器克隆我的仓库。这不起作用,CI 服务器将克隆我的超级存储库,然后它将从中央存储库位置克隆子模块(因为这是它在 .gitmodules 中所说的)。
作为一个团队,我们希望在 sprint 结束时将我们的代码合并到中央存储库之前,有一个我们努力的集成存储库。出于同样的原因,这失败了。
我尝试为子模块指定相对 URL,但这也不起作用,因为当我们将第二层克隆到第三层时,相对 URL 相对于第二层存储库位置进行解析,但第二层子模块位置在第二层超级仓库。
我可以两者兼得吗?Git子模块和n层存储库结构?