git 移除子模块详解及操作步骤

2,110 阅读1分钟

移除子模块 e.g. $path_to_submodule

前言

需求场景

依据不同的需求,子模块移除场景如下:

case 1: 子模块移除【全部】 or 移除其中【n个】

case 2: 子模块目录的【去】 or 【留】

指令用途

  1. 移除父级项目中的设置:从.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
  1. 解除与父级项目的关联关系:从工作树中删除submodule模块的信息。

作用 $path_to_submodule下的文件将消失,.gitmodules文件(源文件)中的子模块条目也将消失。但是若不操作“1.”则子模块依旧可以恢复。

case 1: 子模块移除【全部】

  rm -rf .gitmodules

case2: 子模块目录【去】

  git rm $path_to_submodule

case2: 子模块目录【留】 手动从 .gitmodules 文件移除相关设置.

效果预览

初始效果

image.png

仅移除设置效果 image.png

image.png

仅解除关联效果

image.png

整体效果

image.png

实战操作

  1. 从 .git/config中移除子模块设置.
  git config --unset --local submodule.$path_to_submodule.active
  git config --unset --local submodule.$path_to_submodule.url
  1.  删除工作树中$path_to_submodule,若保留则跳过往下执行 注意:① 路径最后无"/"; ② 加--cached时,.gitmodule关联无法解除(必要时可手动操作);
  git rm $path_to_submodule
  1. 从 .gitmodules 文件移除相关设置,若去除所有子模块则移除整个文件.

  2. 移除子模块文件夹

 rm -rf path_to_submodule
  1. 删除子模块缓存信息
  rm -rf .git/modules/$path_to_submodule
  1. 暂存相关变更
  git add .
  1. 提交变更
  git commit -m "Removed submodule <name>"