submodule 子仓库
父仓库(A) 需要依赖 子仓库(B)
场景准备
本地A库 --》 github/A --> 父仓库
本地B库 --》 github/B --> 子仓库
注意:
A 和 B 都是在同一个github账号,只要本地和github账号配置ssh协议就行
A 和 B 不在同一个github账号 , 需要 本地和 另一个github账号配置ssh 免密钥登陆
实验:
//1 在本地A库中 添加远程B仓库
git submodule add B仓库的远程地址
/*
1. 在A库中下载远程B仓库的代码
2. .gitmodules 文件 (子仓库的配置文件)
*/
//2 将本地的新增的B库 推送到远程的A库中
cd A/
git add .
git commit -m 'A中引用B库'
git push
//3 如果B库更新代码 对于A库来说是否可以直接感知??
远程A库 不会主动感知
本地A库 不会主动感知
//4 在本地A库中手动拉取B库的最新内容
cd A/B
git pull
//5 将本地的A库中的B库更新内容推送远程A库
cd A/
git add .
git commit -m 'b库跟新内容'
git push
### 简化子仓库的更新 (假设有100个类似于B的子仓库,而且每一个子仓库都更新了 )
cd A/
git submodule foreach git pull // 会进入 每一个子仓库 执行git pull来拉取每一个子仓库的最新代码
git add .
git commit -m '所有子库都跟新'
git push
### 克隆一个有子仓库的仓库(A)
git clone git@github.com:XuanqiYan/A.git 不会克隆A库下面的子仓库
git clone git@github.com:XuanqiYan/A.git --recursive 才能克隆内部所有子仓库
### 删除本地的B库依赖
// 1.本地A库中删除B库依赖
git rm --cached B // 在暂存区 删除B 文件夹
rm -rf B // 在工作区 删除B库文件夹
rm -rf .gitmodules // 在工作区删除 配置文件
git add .
git commit -m '移除B库'
// 2.推送到远程A库 来删除B库依赖
git push