如何在不使用递归的情况下仅更新Git一级子模块?
解决Git仅更新一级子模块的问题
问题场景
项目目录结构如下:
<project> .....<submodules1> ..........<sub1> .............<submodules2> .................<sub11> ......................<src> .........................<submodules3> .............................<sub2> ....<submodules4> .........<sub41> .............<src> ................<submodules5>
使用git clone "ssh:..."克隆项目后,执行git submodule update --init仅初始化了submodules2的空文件夹,无实际内容。需求是仅更新一级子模块,不想用--recursive参数避免触发深层的submodules3更新。
解决步骤
查看当前层级的直接子模块
先确认当前目录下定义的直接子模块列表,执行:git submodule输出结果会显示当前层级的所有一级子模块。
针对性初始化更新一级子模块
- 如果是项目根目录的一级子模块,直接执行:
该命令默认只处理当前目录下的直接子模块,不会递归触发子模块内部的子模块更新。git submodule update --init - 如果你的目标是sub1下的submodules2(属于sub1的一级子模块),需要先进入sub1目录再执行命令:
这样只会拉取submodules2的内容,不会触及更深层的submodules3。cd submodules1/sub1 git submodule update --init
- 如果是项目根目录的一级子模块,直接执行:
验证结果
检查目标子模块目录,确认已有实际内容,而深层的submodules3仍为空文件夹(未被初始化)。
补充说明
git submodule update --init的默认行为就是仅处理当前目录下的直接子模块,不会递归。你之前遇到submodules2为空的情况,大概率是因为sub1本身是一个子模块,需要先确保sub1被正确拉取后,再进入sub1目录处理它的直接子模块。
内容的提问来源于stack exchange,提问作者user2824459
相关产品推荐
相关产品推荐

