当前位置:   article > 正文

git submodule---同步最新的内容_git 如何把子模块也同步到某个提交

git 如何把子模块也同步到某个提交

0 Preface/Foreword

1 同步最新submodule内容到repo中

项目的repo包含了一个子模块,在开发过程中,经常需要同步子模块最新的commit到repo中。该如何操作呢?

本地在克隆时候,已经同步把子模块中的内容克隆下来了,但是,过了一段时间,子模块在主分支有了新的提交,此时项目repo中记录的还是之前子模块的提交记录。 以下方法用于把子模块最新的提交更新到项目repo中。

步骤如下

第一步:在项目repo中,进入到子模块文件夹下,通过git pull进行拉取

克隆代码的时候,在本地会拉取子模块所有的内容,然后在切换到对应的点(当前项目repo绑定的点)。(为了演示整个过程,重新拉取了项目repo

拉取前:

拉取后:

 因为重新拉取了项目repo,所以本地子模块中已经包含了远程子模块中所有内容,但是远程项目repo记录的子模块点是之前的点,所有子模块目前自动切换到了之前的点。

提示当前没有在一个分支上,需要切换到一个指定的分支。

第二步:返回项目repo根目录,git status查看状态

发现子模块(文件夹)有新的提交。

当前远程仓库中记录的子模块最新的提交如下

第三步:git add 子模块更改

第四步:git commit提交到本地仓库 

第五步:git push 到远程仓库

2 回退子模块修改 

2.1 项目repo路径下update子模块

  git submodule update --remote

 

2.2 回退子模块 

 git submodule update --init --recursive

 

3 查看子模块修改 

3.1 在项目repo路径下查看

git diff 

 

3.2 查看子模块具体修改

git diff --submodule 

 

 3.3 设置submodule显示的总结个数

 git config status.submoduleSummary 1

4 推送代码到子模块 

4.1 能否推送代码到子模块 

在包含子模块的repo中,无法推送代码到子模块中。记住:只能从子模块中拉取代码,不能提交代码

 

从实测中可知:

  1. 如果修改远程中包含的文件,在本地会有修改记录,在本地仓库可以通过git add, git commit,但是无法提交git push
  2. 如果添加新的内容,git status是不会提醒“untracked files”。

但是,在repo中,子模块本地仓库的更新,在repo中会有变更提醒

 如下所示:那么问题来了,可以提交吗?(可以提交,这算是一个git的bug

子模块中的远程仓库,没有commit ID为2aec52cc的提交

在搭建的Linux Docker中,拉取子模块时候,发生错误,表面该以上commit ID在子模块中不存在。

5 同步子模块到指定位置

子模块如果有多个分支的话,仓库可以同步当前子模块到指定分支。(并非只能在main/master分支) 

5.1 同步到指定分支

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/665234
推荐阅读
相关标签
  

闽ICP备14008679号