查看当前子模块#
输出类似:
1
| a1b2c3d4 libs/foo (heads/main)
|
这里的 libs/foo 就是子模块路径。
也可以查看:
输出类似:
1
2
3
| [submodule "libs/foo"]
path = libs/foo
url = git@example.com:foo/bar.git
|
方法一:将 Submodule 转为普通目录(保留源码)#
这种情况不直接删除目录,而是把子模块目录转换成普通目录。
Linux / macOS#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| ## 子模块目录
SUBMODULE=libs/foo
## 注销子模块
## 会移除 .git/config 中的 submodule 配置
git submodule deinit -f "$SUBMODULE"
## 仅从 Git 索引中移除
## 不删除本地代码
git rm --cached "$SUBMODULE"
## 删除 Git 对子模块的本地缓存
rm -rf ".git/modules/$SUBMODULE"
## 删除子模块目录内部的 Git 指向
## 这里的 .git 可能是文件,也可能是目录
rm -rf "$SUBMODULE/.git"
## 重新作为普通目录加入 Git
git add "$SUBMODULE"
## 提交变更
git commit -m "convert submodule to normal directory"
|
Windows PowerShell#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| ## 子模块目录
$SUBMODULE = "libs/foo"
## 注销子模块
## 删除 .git/config 中的 submodule 信息
git submodule deinit -f $SUBMODULE
## 仅从 Git 索引中移除
## 不删除本地代码
git rm --cached $SUBMODULE
## 删除 Git 对子模块的本地缓存
Remove-Item -Recurse -Force ".git/modules/$SUBMODULE"
## 删除子模块目录内部的 Git 指向
## 这里的 .git 可能是文件,也可能是目录
Remove-Item -Recurse -Force "$SUBMODULE/.git"
## 重新添加为普通目录
git add $SUBMODULE
## 提交变更
git commit -m "convert submodule to normal directory"
|
方法二:删除 Submodule(不保留源码)#
Linux / macOS#
下面命令仅需修改 SUBMODULE 字段。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| ## 子模块目录
SUBMODULE=libs/foo
## 注销子模块
## 会移除 .git/config 中的 submodule 配置
git submodule deinit -f "$SUBMODULE"
## 从 Git 索引和工作区中删除子模块
## 同时会更新 .gitmodules
git rm -f "$SUBMODULE"
## 删除 Git 对子模块的本地缓存
## 不删除这里,后续可能无法重新添加同名子模块
rm -rf ".git/modules/$SUBMODULE"
## 提交变更
git commit -m "remove submodule"
|
Windows PowerShell#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| ## 子模块目录
$SUBMODULE = "libs/foo"
## 注销子模块
## 删除 .git/config 中的 submodule 信息
git submodule deinit -f $SUBMODULE
## 从 Git 索引和工作区中删除子模块
## 同时会更新 .gitmodules
git rm -f $SUBMODULE
## 删除 Git 对子模块的本地缓存
Remove-Item -Recurse -Force ".git/modules/$SUBMODULE"
## 提交变更
git commit -m "remove submodule"
|
如果没有任何输出,说明当前仓库已经没有初始化的子模块。
也可以继续检查:
如果文件不存在,或者里面已经没有对应的 submodule 配置,说明 .gitmodules 也已经清理完成。
最后查看 Git 状态:
确认变更符合预期后再提交或推送。