Git嵌套子模块克隆疑问:克隆父仓库[1]为何无法获取子模块[3]?
解决嵌套Git子模块克隆不完整的问题
问题原因
git clone --recurse-submodules命令默认只会递归克隆当前仓库的直接子模块(也就是仓库[1]里的[2]),不会自动处理子模块内部的嵌套子模块([2]里的[3])。这就是克隆[1]时只能拿到[1]和[2],但单独克隆[2]能正常获取[3]的核心原因。
解决方案
方法1:克隆后手动递归更新所有嵌套子模块
克隆仓库[1]完成后,在[1]的根目录执行以下命令,即可拉取所有层级的子模块代码:
git submodule update --init --recursive
该命令会遍历所有子模块(包括嵌套在[2]里的[3]),完成初始化与代码拉取操作。
方法2:一步完成克隆与全量递归子模块
如果想一次性完成克隆和所有嵌套子模块的拉取,可使用组合命令:
git clone {仓库[1]的URL} && cd {仓库[1]的目录名} && git submodule update --init --recursive
方法3:Git 2.13+版本的简化操作(可选)
从Git 2.13版本开始,可通过以下流程简化操作(本质与前两种方法逻辑一致):
git clone --recurse-submodules {仓库[1]的URL} cd {仓库[1]的目录名} git submodule update --init --recursive
额外验证项
虽然你已确认BitBucket上的关联正常,可再快速检查两点:
- 仓库[1]的
.gitmodules文件中,子模块[2]的路径与URL配置无误 - 仓库[2]已提交包含子模块[3]的
.gitmodules文件及对应子模块引用(因单独克隆[2]可正常获取[3],此项大概率无问题)
内容的提问来源于stack exchange,提问作者Kim Chen
相关产品推荐
相关产品推荐

