如何在本地删除git子模块?

问题描述 投票:0回答:2

我想在本地删除子模块而不将更改推送到主线。

这是我所做的:

https://gist.github.com/myusuf3/7f645819ded92bda6677

// 从 .git/config 中删除子模块条目

$ git submodule deinit -f my_submodule

//从超级项目的.git/modules目录中删除子模块目录

$ rm -rf .git/modules/my_submodule

// 删除.gitmodules中的条目并删除位于path/to/submodule的子模块目录

$ git rm -f my_submodule

现在这就是我现在所拥有的:

$ git status -s -uno
D  my_submodule

问题> 如果我在本地提交此更改,然后将所有本地更改推送到主线,这些命令是否会导致子模块(即 my_submodule)从主线删除?

谢谢你

git git-submodules
2个回答
0
投票

是的,它将在远程分支上删除。

由于更改被记录到提交中,因此当您推送时,子模块也将在远程分支上被删除。当您首先添加子模块时,发生了同样的事情。

如果您只想在本地删除它,您要么不需要提交删除,要么创建一个不会合并到主线中的分支。


0
投票

您一直做得很好,直到

git rm -f my_submodule
:此命令将导致 git 状态更改(如您所见)。

当您想要删除子模块时仅在本地而不冒将此删除推送到远程的风险,例如当您之前使用

git submodule init ...
实例化 git 子模块,现在想要摆脱它们以及它们消耗的磁盘空间,同时仍然像以前一样在 git 存储库中跟踪它们时,那么您所需要的只是您指定的前两个 git 命令:

git submodule deinit -f my_submodule

git submodule deinit --all -f

如果您想一次性删除所有实例化的子模块。

加上删除本地子模块 git 数据库:

rm -rf .git/modules/my_submodule

请注意

git status

在这两个命令之后仍然会产生一个空的更改集,正如我们预期的那样:git 现在仍然知道子模块(通过

.gitsubmodules
),但不再占用磁盘空间用于本地实例化。

如果您以后改变主意,您可以随时运行新的

git submodule init
命令并使它们返回到
.gitmodule
指定的路径。

© www.soinside.com 2019 - 2024. All rights reserved.