Git子模块本地修改工作流:如何用本地仓库更新子模块免复制
解决本地Git子模块同步问题的方案
完全可以省去复制粘贴的步骤,通过Git自带的子模块命令直接从本地common仓库同步更新到controller和modules的子模块中,具体操作步骤如下:
1. 确保子模块关联本地common仓库
如果你的controller和modules里的common子模块之前关联的是远程仓库,先把它们的远程地址改成本地common仓库的路径:
- 进入controller项目的common子模块目录:
cd controller/common git remote set-url origin /绝对路径/到你的本地common仓库 - 相同操作应用到modules项目的common子模块:
cd modules/common git remote set-url origin /绝对路径/到你的本地common仓库
如果是首次添加子模块,直接用本地路径添加即可:git submodule add /本地common仓库路径 common
2. 本地common仓库修改并提交
在本地common仓库完成代码修改后,正常提交(测试阶段无需推送到远程):
cd /本地common仓库路径 git add . git commit -m "修改说明:xxx"
3. 同步更新controller和modules的子模块
方式一:单个项目更新
进入controller根目录,执行以下命令拉取本地common的最新修改:
cd controller # 更新子模块到本地仓库的最新提交 git submodule update --remote --merge common # 提交父仓库中子模块的指针变更 git add common git commit -m "同步common子模块到最新修改"
modules项目执行相同步骤即可。
方式二:批量更新所有子模块
如果想一次性更新controller和modules里的common子模块,可以在父目录(假设两个项目都在同一个文件夹下)执行:
# 遍历controller和modules,更新子模块 for repo in controller modules; do cd $repo git submodule foreach git pull origin main git add common git commit -m "同步common子模块" cd .. done
注意:把main换成你实际使用的分支名
额外测试技巧
如果只是临时测试修改,不想提交子模块的指针变更,可以直接进入子模块目录执行git pull,此时父仓库会显示子模块处于"dirty"状态,测试完成后如果要丢弃修改,直接在子模块执行git reset --hard即可。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

