Git 子模块
-> 添加子模块
将一个已存在的目标 Git 仓库添加为当前仓库的子模块。
通过命令 git submodule add [<options>] <repository_url> [<path>]
实现, eg:
git submodule add https://github.com/chaconinc/DbConnector
1
添加的子模块默认是放在当前项目的根目录,也可以指定最后一个path
参数放在其它路径。
添加成功后,会生成一个新的文件 .gitmodules
, 记录子模块信息。
-> 克隆含有子模块的项目
git clone
命令克隆带有子模块的项目,其子模块目录会默认为空
以下两种方式可以完成子模块代码的拉取:
- clone 完成后继续执行两条命令
git submodule init
, 初始化配置文件git submodule update
, 拉取数据到合适的目录
- 给 git clone 添加
--recursive
参数
-> 更新子模块
子模块在加载到主项目里就就成为了主项目的一部分,有固定的版本。不手动更新的话不会自动更新。
-> 在主项目更新子模块
- cd到子模块目录
- 切换到对应分支
- 修改,提交,同步,推送
- 返回主项目根目录,提交子模块的更新,同步,推送
总之,把子模块当作一个独立代码库处理即可。
-> 同步子模块
在当前项目执行命令 git submodule update --remote
可以将子模块同步到最新的一次提交。
该命令默认同步所有子模块。也可以在后面添加具体的子模块名字,只同步局部。eg:
git submodule update --remote DbConnector
1
一般来说,这不是推荐的做法,子模块是主项目的一部分,它的版本由主项目决定。
推荐的做法是:
- git pull同步远程更新
- git status查看本地状态,如果有子模块版本更新,执行
git submodule update
确认本次更新 - 如果不确认,就默认表示放弃本次修改,下次提交后会使得子模块回滚到本地当前的版本
提示
git版本在 v2.14之后, 可全局配置 git config --global submodule.recurse true
使得拉取远程更新时,如果子模块有更新则自动确认更新
-> 删除子模块
- 删除子模块目录及源码
- 手动删除
- 删除子模块目录
- 删除项目目录下
.gitmodules
文件中子模块相关条目 - 删除配置项
.git/config
中子模块相关条目
- 或者执行命令
git submodule deinit [<MOD_NAME>]
, 即逆向初始化
- 手动删除
- 删除模块下的子模块目录
.git/module/*
,- 每个子模块对应一个目录,注意只删除对应的子模块目录即可
- 通过命令的方式
git rm --cached [<MOD_NAME>]
- 提交修改
编辑此页 (opens new window)
更新于: 2019-10-01