Git 移除仓库中的子模块(Submodule)
目录
查看当前子模块
git submodule或者:
cat .gitmodules输出类似:
libs/foo这里的 libs/foo 就是子模块路径。
方法
Linux / macOS
下面命令仅需修改SUBMODULE字段。
## 子模块目录
SUBMODULE=libs/foo && \
## 注销子模块
## 会移除 .git/config 中的 submodule 配置
git submodule deinit -f $SUBMODULE && \
## 从 Git 索引中删除子模块
## 注意:这里只是从 Git 管理中移除
git rm -f $SUBMODULE && \
## 删除 Git 对子模块的缓存
## 不删除这里会导致后续可能无法重新添加
rm -rf .git/modules/$SUBMODULE && \
## 提交变更
git commit -m "remove submodule"Windows PowerShell
## 子模块目录
$SUBMODULE="libs/foo"
## 注销子模块
## 删除 Git 配置中的 submodule 信息
git submodule deinit -f $SUBMODULE
## 从 Git 索引中移除子模块
git rm -f $SUBMODULE
## 删除 Git 本地缓存
Remove-Item -Recurse -Force ".git/modules/$SUBMODULE"
## 提交变更
git commit -m "remove submodule"如果想保留代码,仅取消 Submodule
这种情况不要直接删除目录。
Linux / macOS
## 子模块目录
SUBMODULE=libs/foo && \
## 仅从 Git 索引中移除
## 不会删除本地代码
git rm --cached $SUBMODULE && \
## 删除 submodule 缓存
rm -rf .git/modules/$SUBMODULE && \
## 重新作为普通目录加入 Git
git add $SUBMODULE && \
## 提交变更
git commit -m "convert submodule to normal directory"Windows PowerShell
## 子模块目录
$SUBMODULE="libs/foo"
## 从 Git 索引中移除
git rm --cached $SUBMODULE
## 删除 submodule 缓存
Remove-Item -Recurse -Force ".git/modules/$SUBMODULE"
## 重新添加为普通目录
git add $SUBMODULE
## 提交变更
git commit -m "convert submodule to normal directory"检查
git submodule如果没有任何输出,说明已经删除成功。