马春杰杰博客
致力于深度学习经验分享!

Git子模块[添加/拉取/修改]

最新目录

添加子模块

git submodule add 子模块Git地址 <子模块相对路径>

例如:git submodule add git@gitee.com:Pycharm-Project/QQemailprocess.git 1_自己写的/1.4_网站工具/QQemailprocess

推送到主仓库中

git commit -m "xxx"

git push origin master

删除子模块

rm -rf 子模块目录 删除子模块目录及源码

vi .gitmodules 删除项目目录下.gitmodules文件中子模块相关条目

vi .git/config 删除配置项中子模块相关条目

sudo rm -r .git/modules/子模块目录 删除模块下的子模块目录,每个子模块对应一个目录,注意只删除对应的子模块目录即可

最后add commit push 三连。

拉取子模块

git clone 主仓库地址

此时,主仓库目录下会出现一堆子模块的空目录,如果想要拉取所有的子模块以及子模块下面的子模块,使用:

git submodule update --init --recursive

如果只是想拉取当前目录下所有的子模块,就去掉--recursive

git submodule update --init

如果只是想拉取指定子模块,使用:

git submodule update --init 子模块名字

更新子模块

当远程子模块有更新时,如果主仓库只想更新某个子模块,则进入该子模块:

git pull

如果想要更新所有子模块,则使用:

git submodule foreach git pull

修改并提交子模块

先进入到子模块目录,然后像正常的仓库一样,进行修改,然后

git checkout master

git add .

git commit -m "xxx"

git push origin master

此时子模块原始仓库已经更新了,但是主仓库还是指向子模块的旧ID,所以下一步是需要更新主仓库的指向,回到主仓库的目录,然后:

git commit -am "xxx"

git push origin master

其他

任何时候,只要我们对子模块的修改不满意,想要回到原来的状态,只要没重新指向新的ID,就可以在主仓库目录下使用git submodule update进行回退。

[qgg_green]如果单独修改子模块的仓库(比如单独clone子模块,然后修改并提交到该模块仓库),是不会影响到整个主仓库的,另外更新子模块需要checkout,不然会变成游离状态,可以用git reflog命令查看。[/qgg_green]

赞(208) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Git子模块[添加/拉取/修改]》
文章链接:https://www.machunjie.com/linux/874.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

:smile: :sad: :arrow: :cool: :confused: :cry: :eek: :evil: :exclaim: :idea: :lol: :mad: :mrgreen: :neutral: :question: :razz: :redface: :rolleyes: :surprised: :wink: :biggrin: :twisted: