【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/ 目录下子模块相关内容还有残余,可自行删除:

更多内容

相关推荐
星源~8 小时前
tree 命令集成到 Git Bash:可视化目录结构的指南
git·单片机·物联网·嵌入式·项目开发
zhaqonianzhu9 小时前
git gerrit安装钩子
git·gerrit
这是个栗子9 小时前
【问题解决】VSCode终端中看不到Git-Bash
ide·git·vscode
悲伤小伞9 小时前
linux_git的使用
linux·c语言·c++·git
天机️灵韵11 小时前
云效DevOps vs Gitee vs 自建GitLab的技术选型
git·开源项目
荔枝吻17 小时前
【AI总结】Git vs GitHub vs GitLab:深度解析三者联系与核心区别
人工智能·git·github
mrbone1118 小时前
Git-git worktree的使用
开发语言·c++·git·cmake·worktree·gitab
小哈龙19 小时前
裸仓库 + Git Bash 搭建 本地 Git 服务端与客户端
开发语言·git·bash
GISer_Jing1 天前
Git协作开发:feature分支、拉取最新并合并
大数据·git·elasticsearch
高山莫衣1 天前
git rebase多次触发冲突
大数据·git·elasticsearch