移除子模块 e.g. $path_to_submodule
前言
需求场景
依据不同的需求,子模块移除场景如下:
case 1: 子模块移除【全部】 or 移除其中【n个】
case 2: 子模块目录的【去】 or 【留】
指令用途
- 移除父级项目中的设置:从.git/config中删除submodule的条目。
作用 ①从git子模块更新、git子模块同步和git子模块foreach调用中排除_submodule,并删除其本地内容(源)。此外,这不会显示为父存储库中的更改。
作用② 若此时执行 git submodule init和 git submodule update将恢复子模块,同样不需要在父库中提交更改。
case 1: 子模块移除【全部】 重复case2
case2: 子模块目录【去】
git submodule deinit $path_to_submodule
case2: 子模块目录【留】
git config --unset --local submodule.$path_to_submodule.active
git config --unset --local submodule.$path_to_submodule.url
- 解除与父级项目的关联关系:从工作树中删除submodule模块的信息。
作用 $path_to_submodule下的文件将消失,.gitmodules文件(源文件)中的子模块条目也将消失。但是若不操作“1.”则子模块依旧可以恢复。
case 1: 子模块移除【全部】
rm -rf .gitmodules
case2: 子模块目录【去】
git rm $path_to_submodule
case2: 子模块目录【留】
手动从 .gitmodules 文件移除相关设置.
效果预览
初始效果
仅移除设置效果
仅解除关联效果
整体效果
实战操作
- 从
.git/config中移除子模块设置.
git config --unset --local submodule.$path_to_submodule.active
git config --unset --local submodule.$path_to_submodule.url
- 删除工作树中$path_to_submodule,若保留则
跳过往下执行注意:① 路径最后无"/"; ② 加--cached时,.gitmodule关联无法解除(必要时可手动操作);
git rm $path_to_submodule
-
从
.gitmodules文件移除相关设置,若去除所有子模块则移除整个文件. -
移除子模块文件夹
rm -rf path_to_submodule
- 删除子模块缓存信息
rm -rf .git/modules/$path_to_submodule
- 暂存相关变更
git add .
- 提交变更
git commit -m "Removed submodule <name>"