赞
踩
项目的repo包含了一个子模块,在开发过程中,经常需要同步子模块最新的commit到repo中。该如何操作呢?
本地在克隆时候,已经同步把子模块中的内容克隆下来了,但是,过了一段时间,子模块在主分支有了新的提交,此时项目repo中记录的还是之前子模块的提交记录。 以下方法用于把子模块最新的提交更新到项目repo中。
步骤如下:
第一步:在项目repo中,进入到子模块文件夹下,通过git pull进行拉取
克隆代码的时候,在本地会拉取子模块所有的内容,然后在切换到对应的点(当前项目repo绑定的点)。(为了演示整个过程,重新拉取了项目repo)
拉取前:
拉取后:
因为重新拉取了项目repo,所以本地子模块中已经包含了远程子模块中所有内容,但是远程项目repo记录的子模块点是之前的点,所有子模块目前自动切换到了之前的点。
提示当前没有在一个分支上,需要切换到一个指定的分支。
第二步:返回项目repo根目录,git status查看状态
发现子模块(文件夹)有新的提交。
当前远程仓库中记录的子模块最新的提交如下:
第三步:git add 子模块更改
第四步:git commit提交到本地仓库
第五步:git push 到远程仓库
git submodule update --remote
git submodule update --init --recursive
git diff
git diff --submodule
git config status.submoduleSummary 1
在包含子模块的repo中,无法推送代码到子模块中。记住:只能从子模块中拉取代码,不能提交代码。
从实测中可知:
但是,在repo中,子模块本地仓库的更新,在repo中会有变更提醒,
如下所示:那么问题来了,可以提交吗?(可以提交,这算是一个git的bug)
子模块中的远程仓库,没有commit ID为2aec52cc的提交。
在搭建的Linux Docker中,拉取子模块时候,发生错误,表面该以上commit ID在子模块中不存在。
子模块如果有多个分支的话,仓库可以同步当前子模块到指定分支。(并非只能在main/master分支)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。