在主仓库工作时,是否需要手动提交和推送Git子模块SHA?
Git子模块SHA的提交与推送说明
当你在主仓库执行git submodule update --remote --init --recursive时,本地子模块会同步到远程的最新版本,但主仓库里记录的子模块SHA还是旧值——这就是远程主仓库中子模块仍指向一年前版本的原因。
必须提交并推送新的子模块SHA
主仓库是通过固定SHA来追踪子模块版本的。如果只更新本地子模块但不提交SHA变更,其他克隆主仓库的人拉取代码后,执行git submodule update只会得到旧版本的子模块,无法同步你更新的内容。直白来说:主仓库里的子模块SHA属于版本记录的一部分,和你修改的
src、tests文件一样,需要提交并推送到远程,才能让团队其他人同步到你更新的子模块版本。规范操作步骤
- 执行
git submodule update --remote --init --recursive,将本地子模块更新到远程最新版本 - 返回主仓库根目录,执行
git status,会看到my_git_submodule标记为modified(因为SHA已变更) - 提交该变更:
git add my_git_submodule,接着执行git commit -m "Update my_git_submodule to latest version" - 推送到远程主仓库:
git push
- 执行
关于"不能手动修改子模块SHA"的说明
不存在"绝对不能手动修改"的硬性规定,但直接编辑.gitmodules或.git/modules里的SHA值是极不推荐的——你无法保证这个SHA在子模块远程仓库中存在且有效,还容易引发版本混乱。正确的做法是通过git submodule update --remote更新子模块,再提交自动生成的SHA变更,这才是符合Git规范的流程。
内容的提问来源于stack exchange,提问作者user9608133
相关产品推荐
相关产品推荐

