如何配置Git在执行git pull时自动将子模块更新至提交状态?
解决Git拉取主仓库时自动同步子模块的问题
这确实是Git子模块使用中常见的痛点——默认情况下git pull只会更新主仓库里的子模块引用记录,不会主动去拉取子模块的实际代码变更,导致本地子模块版本和主仓库指向的版本脱节,git status就会显示子模块为已修改状态。虽然手动执行git submodule update能临时解决,但我们可以通过配置让Git自动完成这个同步操作:
1. 临时拉取时同步子模块
如果只是想单次拉取时同步子模块,直接在pull命令里加上参数即可:
git pull --recurse-submodules
要是已经拉取了主仓库但还没更新子模块,也可以单独执行:
git submodule update --init --recursive
2. 配置Git自动同步子模块(一劳永逸)
全局配置(所有仓库生效)
执行下面的命令,以后任何仓库执行git pull时,都会自动递归更新子模块:
git config --global submodule.recurse true
单个仓库配置(仅当前仓库生效)
如果只想给特定仓库开启这个功能,进入仓库目录后执行:
git config submodule.recurse true
额外配置:同步子模块的远程分支更新
如果还希望Git在执行fetch时也同步子模块的远程分支(确保子模块的本地分支能获取到最新的远程变更),可以再加个配置:
# 全局生效 git config --global fetch.recurseSubmodules true # 单个仓库生效 git config fetch.recurseSubmodules true
配置完成后,下次再执行git pull,Git就会自动同步主仓库和所有子模块到对应提交版本,再也不用手动处理子模块的状态不一致问题了。
内容的提问来源于stack exchange,提问作者autarch princeps
相关产品推荐
相关产品推荐

