背景
记录工作中git子仓库的使用
什么是子仓库
git提供的一种机制,用于在一个仓库中嵌套另一个独立的仓库,子仓库管理的代码作为模块被项目所使用,同时子仓库独立维护版本
常见命令
bash
# 首次集成子仓库
git submodule add <仓库url> <本地路径>
# 拉取子仓库最新代码
git submodule update --remote
# 初始化子仓库配置
git submodule init
日常使用
主仓库维护者首次添加子仓库
首次集成子模块只需使用 git submodule add指令,动作包含:
- 主仓库初始化子模块配置,可以查看 .git/config 文件更改
- 生成.gitmodules文件,内容包含子模块仓库地址及目录
- 克隆子仓库到子目录
bash
# 添加子模块
git submodule add <仓库url> <本地路径>
# 提交
git add .
git commit -m '添加子模块'
# 推送主仓库变更
git push
协同者克隆主仓库
协同开发者拉取主仓库需要对子仓库初始化,同时还需拉取子仓库代码
bash
# 初始化子仓库
git submodule init
# 拉取子仓库
# 方式1:从来自当前主仓库记录的子仓库提交记录拉取,意味着可能拉取的不是最新的子仓库代码
git submodule update
# 方式2:拉取最新的子仓库代码,忽略来自主仓库的记录
git submodule update --remote
删除子仓库
从git中删除子模块(submodules),包含下面三个动作
- 清理git文件追踪(删除git cache)
- 清理git中相关子模块配置
- 物理删除子模块文件
bash
# 1.git索引清理子模块
git rm --cached path
# 2.清理git中相关子模块配置
a .gitmodules
## 方式1
git config -f .gitmodules --remove-section submodule.path
## 方式2:
手动删除.gitmodules中相关模块
b. .git/config
## 方式1
git config -f .git/config --remove-section submodule.path
## 方式2
手动删除.git/config相关子模块配置
# 3.清除子模块文件夹
# a. 清除根目录下子模块文件夹
rm -rf path
# b.清除.git/modules子模块缓存
rm -rf .git/modules/path
# 4. 提交更改
git commit -m "Remove submodule path/to/submodule"
注意事项
- 可以添加多个子模块