【Git】一文教你学会 submodule 的增、查、改、删

添加子模块

bash 复制代码
$ git submodule add <url> <path>
  • url 为想要添加的子模块路径
  • path 为子模块存放的本地路径

示例,添加 r-tinymaix 为子模块到主仓库 ./sdk/packages/online-packages/r-tinymaix 路径下,命令如下所示:

bash 复制代码
$ git submodule add https://github.com/RiceChen0/r-tinymaix.git ./sdk/packages/online-packages/r-tinymaix

等命令执行完毕后,在本地路径就可以看到子模块内容了:

此时报了一个警告:

bash 复制代码
warning: in the working copy of '.gitmodules', LF will be replaced by CRLF the next time Git touches it

这是因为在文本处理中,Windows平台中使用 CR/LF(回车/换行)作为换行符,Linux平台中仅使用 LF(换行)作为换行符,这个问题可以通过以下方式解决:

bash 复制代码
$ git config --global core.autocrlf true

查看子模块

bash 复制代码
$ git submodule

可以看到子模块信息:

bash 复制代码
c5029b773b0511d32cca78275b7c8f1fb5eb34a8 sdk/packages/online-packages/r-tinymaix (heads/main)

修改子模块

子模块独立于主仓库,当子模块需要修改时,需要进入子模块文件夹,按照子模块版本控制体系修改提交代码。

更新子模块

bash 复制代码
$ git submodule update

提交子模块

查看仓库状态:

bash 复制代码
$ git status

可以看到有新文件添加进来:

这里我自己添加了一个 Sconscript 文件,将它也添加进来,执行命令:

bash 复制代码
$ git add .

提交到仓库、推送到远端:

bash 复制代码
$ git commit -m "add r-tinymaix" 
$ git push origin HEAD:master

博主仓库没有远端,就不 push 了~

删除子模块

简单粗暴式

  • 删除 .gitmodules 文件中子模块相关条目:
  • 删除 .git/config 配置项中子模块相关条目:
  • 删除 .git/module/ 目录下子模块相关内容:
  • 删除子模块目录及源码:

官方优雅式

  • 根据官方文档,使用卸载子模块命令:
bash 复制代码
$ git submodule deinit sdk/packages/online-packages/r-tinymaix

如果添加上参数 -f,则子模块工作区内即使有本地的修改,也会被移除:

此操作是在 .git/config 配置项中删除了子模块相关条目:

  • 执行 rm 命令:
bash 复制代码
git rm  sdk/packages/online-packages/r-tinymaix

此操作为移除 sdk/packages/online-packages/r-tinymaix 文件夹,并自动在 .gitmodules 中删除了 r-tinymaix 子模块相关内容:

但是此时 .git/module/ 目录下子模块相关内容还有残余,可自行删除:

更多内容

相关推荐
{⌐■_■}9 小时前
【git】提交修改、回撤、回滚、Tag 操作讲解,与reset (--soft、--mixed、--hard) 的区别
大数据·git·elasticsearch
GardenTu12 小时前
初尝git自结命令大全与需要理解的地方记录
git·github
真就死难20 小时前
Git是什么
git
机械心1 天前
代码管理git详细使用教程及最佳实践路径
git
hkj88081 天前
Git 常用命令
git
dawnkylin1 天前
通过 fork 为项目做出贡献
git·github
1379003402 天前
Git 设置代理
git
xiaodunmeng2 天前
sourcetree gitee 详细使用
git
LostSpeed2 天前
git,gitea - tool - creat Gitea Empty Rep Dir
git·gitea
前端郭德纲2 天前
vscode默认终端怎么设置成git bash
git·vscode·bash