如何删除Git子模块?为什么我不能git子模块rm模块名称?


当前回答

我不得不进一步执行John Douth的步骤,并将其cd到子模块的目录中,然后删除Git存储库:

cd submodule
rm -fr .git

然后,我可以将文件作为父Git存储库的一部分提交,而无需对子模块的旧引用。

其他回答

git子模块deinit<子模块路径>从.gitmodules中删除节git rm<子模块路径>删除需要从项目中删除的模块文件。将删除的文件添加到git并调用gitadd.gitmodules提交并推送

您可以使用别名自动化其他人提供的解决方案:

[alias]
  rms = "!f(){ git rm --cached \"$1\";rm -r \"$1\";git config -f .gitmodules --remove-section \"submodule.$1\";git config -f .git/config --remove-section \"submodule.$1\";git add .gitmodules; }; f"

将其放入git配置中,然后可以执行:git rms path/to/submodule

简单的步骤

删除配置项:git-config-f.git/config--删除节子模块$submodulename git-config-f.gitmodules—删除部分子模块$子模块名称从索引中删除目录:git rm--cached$submodule路径犯罪删除未使用的文件:rm-rf$submodulepathrm-rf.git/modules/$submodulename

请注意:$submodulepath不包含前导或尾随斜杠。

出身背景

当您执行git子模块add时,它只将其添加到.gitmodules中,但是完成git子模块init后,它将添加到.git/config中。

因此,如果您希望删除模块,但能够快速恢复,那么就这样做:

git rm --cached $submodulepath
git config -f .git/config --remove-section submodule.$submodulepath

首先执行git rebase HEAD和git commit是一个好主意最后,如果你把这个写在脚本中。

还可以看看我可以取消填充Git子模块吗?的答案?。

在最新的git中,删除git子模块只需要4个操作。

删除.gitmodules中的相应条目阶段更改gitadd.gitmodules删除子模块目录git rm--cached<path_to_submodule>Commit git Commit-m“已删除子模块xxx”

可以通过运行git rm<submodule path>和git commit来删除子模块。这可以使用git-restore撤消。删除将删除超级项目的跟踪数据,这些数据既是gitlink条目,也是.gitmodules文件中的部分。子模块的工作目录从文件系统中删除,但Git目录被保留下来,以便可以在不需要从另一个存储库获取的情况下签出过去的提交。要完全删除子模块,请另外手动删除$GIT_DIR/modules/<name>/。

来源:git help子模块