使用--recursive标志不能正确克隆嵌套Git子模块

使用--recursive标志不能正确克隆嵌套Git子模块,git,git-submodules,Git,Git Submodules,我正在设置github项目的内部镜像。项目中有子模块,在原始子模块中也有子模块 我已经分别镜像了所有存储库,并更新了所有存储库中的.gitmodules文件,以指向内部镜像位置。所有存储库都使用--recursive单独克隆,没有任何问题。出于某种原因,当我尝试克隆任何具有嵌套子模块的存储库时,第一组子模块将从.gitmodules中正确读取并克隆,但是该子模块中的子模块都将尝试从其原始github URL克隆。我不知道这些URL来自哪里,因为嵌套的子模块都更新了它们的.gitmodules文件

我正在设置github项目的内部镜像。项目中有子模块,在原始子模块中也有子模块

我已经分别镜像了所有存储库,并更新了所有存储库中的.gitmodules文件,以指向内部镜像位置。所有存储库都使用--recursive单独克隆,没有任何问题。出于某种原因,当我尝试克隆任何具有嵌套子模块的存储库时,第一组子模块将从.gitmodules中正确读取并克隆,但是该子模块中的子模块都将尝试从其原始github URL克隆。我不知道这些URL来自哪里,因为嵌套的子模块都更新了它们的.gitmodules文件


以前有人碰到过这个吗?有什么想法吗

这是最好的方法:

git子模块更新--init--recursive


这解决了您的问题吗?

当您使用
git子模块更新--init--recursive进行初始设置时,您直接从记录的提交中获取
.gitmodules
值。我在想,当你更新
.gitmodules
文件时,你没有先进行深度更新,所以当第一级子模块中记录的
.gitmodules
被更新和添加时,它自己的子模块尚未更新和添加,因此记录的提交仍然具有原始的
.gitmodules
文件。

所有子模块的.gitmodules文件都已更新。我从未运行过git子模块更新——init——递归。我需要执行此步骤吗?我找不到任何关于如何通过谷歌做到这一点的好的概述,比如“这相当于在克隆完成后立即运行
git子模块更新--init--recursive
”。我明白了,我解决了我的问题。子模块都引用了早于我签入的SHA来更新.gitmodule文件。我必须在每个级别签出正确的SHA,然后签回,然后git子模块更新--init--recursive工作。否--任何嵌套子模块的克隆都尝试从github克隆,而不是从我的内部镜像克隆。这就像克隆没有对子模块使用head修订版,而是获得了.gitmodules文件的旧版本一样