如何在Git递归更新时仅保留Boost子模块的指定嵌套子模块
解决嵌套子模块的部分拉取需求
这里有两种实用方案,既能用--recursive批量处理大部分子模块,又能精准拉取boost本身及其指定的两个子模块:
方法一:分两步执行(清晰直观)
先递归初始化所有子模块,但仅拉取boost本身,不自动处理它的嵌套子模块:
git -c submodule."lib/boost".recurse=false submodule update --init --recursive这里的
submodule."lib/boost".recurse=false会让Git在处理boost时跳过自动递归,但boost模块本身会被正常克隆、初始化。单独初始化boost下需要的两个子模块:
git -C lib/boost submodule update --init libs/container libs/lockfree-C lib/boost相当于先切换到boost子模块目录,再执行子模块初始化命令,直接指定目标子模块路径即可。
方法二:单命令完成(精简高效)
如果想用一条命令搞定,通过多个临时配置项精准控制拉取逻辑:
git -c submodule.recurse=true -c submodule."lib/boost".recurse=false -c submodule."lib/boost/libs/container".update=checkout -c submodule."lib/boost/libs/lockfree".update=checkout submodule update --init --recursive
submodule.recurse=true:保持全局递归处理所有其他子模块submodule."lib/boost".recurse=false:禁止自动递归boost的嵌套子模块- 最后两个配置强制指定boost下的两个目标子模块必须被拉取初始化
关键注意点
- 你之前用的
submodule."lib/boost".update=none会直接跳过整个boost模块,这显然不符合需求;而submodule."lib/boost".recurse=false只是阻止Git自动处理boost的子模块,boost本身仍会被正常初始化。 - 所有通过
-c设置的配置都是临时生效的,不会修改仓库的本地或全局配置,不会影响后续操作。
内容的提问来源于stack exchange,提问作者T. J. Evers
相关产品推荐
相关产品推荐

