Git子模块故障:已设相对路径却无法获取本地最新变更
解决Git子模块URL修改及本地同步问题
1. 修正子模块URL的正确命令
你之前使用的git submodule set submodule.mysub.url ../mysub仅修改了本地仓库的config文件,不会同步更新仓库根目录的.gitmodules共享配置文件,这是核心问题。正确的修改命令应为:
git submodule set-url mysub ../mysub
执行后,.gitmodules文件内的URL会自动更新为相对路径../mysub,同时本地config也会保持一致。
2. 同步配置并验证
完成URL修改后,执行以下操作确保配置生效:
- 同步子模块配置到本地:
git submodule sync --recursive - 进入子模块目录,确认远程地址已更新:
输出结果中cd mysub git remote -vorigin的地址应为../mysub。
3. 拉取本地mysub的未推送变更
现在可以直接从本地仓库拉取未推送的提交:
cd mysub git pull origin <你的分支名称>
若需合并特定分支的本地变更,也可直接执行:
git checkout <目标分支> git merge ../mysub/<目标分支>
4. 在主仓库提交变更
回到main仓库,提交子模块的URL修改及更新后的提交记录:
cd .. git add .gitmodules mysub git commit -m "Update mysub submodule URL to local relative path and sync latest changes"
关键说明
.gitmodules是仓库共享配置文件,必须保证其被正确修改,否则其他协作克隆仓库时仍会使用旧的远程URL。- 之前你执行
git submodule sync后配置被覆盖,正是因为.gitmodules里的旧地址未更新,sync操作会将共享配置同步到子模块本地config,覆盖你单独修改的内容。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

