目录

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

如果没有任何输出,说明已经删除成功。