首页 > 解决方案 > 将 Git 存储库和子模块镜像到离线源

问题描述

所以我意识到有类似的问题,但他们似乎都没有回答如何将存储库镜像到离线位置的问题,而无需在超级项目之外手动组织子模块。大多数问题都是关于“在线”镜像,或者没有子模块的离线镜像。

我的第一个想法是为我的超级项目创建一个镜像,但由于 repo 是裸露的,你不能运行git submodule update.

现在,我知道在这种情况下.gitmodules,使用相对路径而不是绝对路径对您有好处,我们已经这样做了。

但是我仍然不太了解拥有超级项目及其所有子模块的镜像的最佳方式。

我们的项目由一个包含许多子模块(约 50 个,但没有嵌套)的存储库组成,因此我试图避免手动维护它们。

这必须是可能的,但我还没有偶然发现最好的组织是什么,以及如何找回它。

任何帮助将不胜感激!

谢谢你们。

标签: git

解决方案


我想我遇到了与您的问题类似的问题。我的问题是不同网络上的开发人员有不同的子模块路径。我的解决方案是使用url.PATH.insteadOf URL并设置一个变量来填充 URL。见下文。我在我的 .bashrc 中设置 GITPUB 以指向我存储所有公共存储库的位置。

git config --global url.file:///MY/PATH/.insteadOf file:///GITPUB
git config -f .gitmodules submodule.MYSUBMODULE.url=file:///GITPUB/subrepo.git
git submodule sync MYSUBMODULE
git submodule update MYSUBMODULE

您必须为每个子模块执行此操作,但在脚本中执行此操作很容易。

我们通过在 repo.git 和每个 submodule.git 中运行以下命令来创建 repo 和子模块的包。git bundle create myrepo.bundle --all. 您可以使用 进行增量更新since=git bundle create myrepo.bundle --all --since=8/30/19

另一方面,您可以从捆绑包中提取git pull myrepo.bundle my_branch如果进行完整导出,您可以使用镜像捆绑包git clone --mirror myrepo.bundle


推荐阅读