git - 如何使用子模块和 n 层 git 存储库策略

标签 git git-submodules relative-url

我们正在迁移到 git。我们有大量模块构成我们的产品,其中一些模块在产品之间共享。该产品由仅包含子模块的“瘦” super 存储库 (ssh://server/product.git) 表示:

[submodule "module1"]
path=module1
url=ssh://server/product/module1.git
[submodule "module2"]
path=module2
url=ssh://server/product/module2.git
...

我可以克隆 super 存储库并使用子模块并提交它们,然后将子模块提交到 super 存储库。

当我想引入另一层时,问题就来了。有两种基本场景(这可以结合起来进行更复杂的设置,但任何事情都应该是这些场景的组合):

  1. 作为一名开发人员,我克隆了一个中央存储库并开始工作。然后我想在将我的更改 merge 到中央存储库之前将我的代码提交到我们的持续集成服务器。我让 CI 服务器克隆我的 repo。这不起作用,CI 服务器将克隆我的 super 存储库,然后它将从中央存储库位置克隆子模块(因为这是它在 .gitmodules 中所说的)。

  2. 作为一个团队,我们希望在冲刺结束时将我们的代码 merge 到中央存储库之前,先建立一个集成存储库。出于同样的原因,这失败了。

我尝试为子模块指定相对 URL,但这也不起作用,因为当我们将第二层克隆到第三层时,相对 URL 相对于第二层存储库位置进行解析,但第二层子模块位置位于第二层 super 存储库中。

我可以两者兼得吗? Git 子模块和 n 层存储库结构?

最佳答案

相对链接在子模块中不起作用。使用 gitolite 来 stash 你所有的存储库。届时您的结构将起作用。

其他网址也有问题。例如 ..\someotherrepo\\servername\reponame 甚至 file:///\\server\... 给子模块。

关于git - 如何使用子模块和 n 层 git 存储库策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6594005/

相关文章:

git - Git 可以克隆不包括子模块的分支吗?

php - 无法通过 TortoiseGit 或 msysGit check out 适用于 Windows 8 的 Git 代码。适用于 Ubuntu Git。 "Submodules error"

css - 使用 w3 total cache plugin for wordpress 生成的缩小 css 文件时如何处理 css 中的相对字体链接

javascript - 有没有办法重写所有相对 URL :s when inserting a HTML fragment in jQuery?

svn - Git、Mercurial 和 Bazaar 的相对优势和劣势是什么?

git - 为什么 git stash pop 说它无法从存储条目中恢复未跟踪的文件?

git - 如何从现有目录结构生成 git superproject

git - 如何为 Xcode 项目设置 Git 存储库?

node.js - 将 Node 模块 checkin Git 中以获取新分支