如何将Git子模块(MySQL)变更推送到本地仓库并同步多设备?
问题解答
首先直接给出结论:仅进入子模块目录执行git add . && git commit -m "Message" && git push无法满足你的需求。原因是Git子模块的同步依赖于其上游远程仓库,你没有权限推送到MySQL子模块的官方上游,其他设备拉取时依然会从原上游获取旧版本,你的本地变更无法同步过去。
下面是符合规范的简洁实现方法:
步骤1:为子模块创建自己的远程仓库
在你有权限的Git平台(如个人GitHub、GitLab)创建一个新仓库,作为你本地MySQL子模块变更的同步仓库。
步骤2:修改子模块的远程地址
进入主项目目录,执行命令将子模块的远程指向你自己的仓库:
git submodule set-url <你的MySQL子模块路径> <你创建的远程仓库地址>
步骤3:提交并推送主项目的变更
- 先进入子模块目录,将本地变更推送到你的远程仓库:
cd <子模块路径> git add . git commit -m "同步MySQL子模块本地变更" git push origin <当前分支> - 返回主项目目录,提交子模块的远程地址更新和最新commit记录:
cd .. git add .gitmodules <子模块路径> git commit -m "更新子模块远程地址及同步本地变更" git push
步骤4:其他设备同步变更
在其他设备上拉取主项目的最新代码后,执行以下命令同步子模块:
git pull git submodule update --init --recursive
注意事项
- 后续每次子模块有本地变更,都需要先推送到你的远程仓库,再在主项目中提交子模块的最新commit并推送,确保其他设备能同步到变更。
- 若只是临时同步不想修改主项目配置,可在其他设备的子模块目录中手动执行
git remote set-url origin <你的远程仓库地址>,再拉取变更,但这种方式不适合长期维护。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

