添加子模块
- 添加子模块命令如下所示:
$ git submodule add <url> <path>
url
为想要添加的子模块路径path
为子模块存放的本地路径
- 以 GitHub 仓库 r-tinymaix https://github.com/RiceChen0/r-tinymaix 为例,将其做为子模块添加到本地仓库
./sdk/packages/online-packages/r-tinymaix
路径下,完整命令如下:
$ git submodule add https://github.com/RiceChen0/r-tinymaix.git ./sdk/packages/online-packages/r-tinymaix
- 命令执行中下载该子模块:
- 下载完成后在本地路径就可以看到子模块内容:
- 这里报了一个警告:
warning: in the working copy of '.gitmodules', LF will be replaced by CRLF the next time Git touches it
- 这是因为在文本处理中,Windows平台中使用
CR/LF(回车/换行)
作为换行符,Linux平台中仅使用LF(换行)
作为换行符,这个问题可以通过以下方式解决:
$ git config --global core.autocrlf true
查看子模块
- 查看子模块命令:
$ git submodule
- 可以看到子模块信息:
c5029b773b0511d32cca78275b7c8f1fb5eb34a8 sdk/packages/online-packages/r-tinymaix (heads/main)
- 指令执行效果:
修改子模块
- 子模块独立于主仓库,当子模块需要修改时,需要进入子模块文件夹,按照子模块版本控制体系修改提交代码。
更新子模块
- 更新子模块命令:
$ git submodule update
提交子模块
- 首先查看仓库状态:
$ git status
- 可以看到有新文件添加进来:
- 这里我自己添加了一个
Sconscript
文件,将它也添加进来,执行命令:
$ git add .
- 再次查看仓库状态,新文件已经添加进来了:
- 提交到仓库、推送到远端:
$ git commit -m "add r-tinymaix" $ git push origin HEAD:master
- 博主仓库没有远端,就不
push
了~
删除子模块
简单粗暴式
- 删除
.gitmodules
文件中子模块相关条目:
- 删除
.git/config
配置项中子模块相关条目:
- 删除
.git/module/
目录下子模块相关内容:
- 删除子模块目录及源码:
官方优雅式
- 根据官方文档,使用卸载子模块命令:
$ git submodule deinit sdk/packages/online-packages/r-tinymaix
- 如果添加上参数
-f
,则子模块工作区内即使有本地的修改,也会被移除:
- 此操作是在
.git/config
配置项中删除了子模块相关条目:
- 执行
rm
命令:
git rm sdk/packages/online-packages/r-tinymaix
- 此操作为移除
sdk/packages/online-packages/r-tinymaix
文件夹,并自动在.gitmodules
中删除了r-tinymaix
子模块相关内容:
- 但是此时
.git/module/
目录下子模块相关内容还有残余,可自行删除:
更多内容
- Hello阿尔法-CSDN博客
- Hello阿尔法-知乎
- Github