如何继续删除子模块,但保留其历史记录(从父历史记录链接)?

How to remove a submodule going forward, but keep its history (as linked from parent history)?

假设我有一个项目有一个使用 git submodule 实现的依赖项。现在我正在改变不再需要这种依赖的地方。我想提交如下工作的更改:

换句话说,我不想按照How do I remove a submodule?答案的指示删除子模块。事实上,我写这个问题是为了澄清那个问题。[1]

当我有空的时候,我会尝试一些实验。它可能就像 git submodule deinit and/or 从 .gitsubmodules 中删除它的条目一样简单。我搜索了 Stack Overflow,没有找到专门针对此案例的问题或答案。连写的再牛逼的Mastering Git submodules也不清楚这个


[1]:这些答案中所需的许多步骤告诉我,这种抹杀不是“正常”的,否则 git 将包含一个瓷器命令,为您完成这一切。相反 git deinit 提供了非常狭窄的行为。我觉得是故意的。

git submodule deinit that I documented in 2013 及其关联的 rm -rf .git/modules/a/submodule 均假定已推送已删除的子模块。

最初引入子模块是为了以只读方式使用,以便将其他存储库内容添加到您的存储库中,而不一定是为了修改它们。
,其中修改更自然。

也就是说,是的,如果您删除了一个子模块而没有对所述子模块进行 committed/pushed 本地更改,最终结果将不会令人满意。

一个可能的补丁想法是 block/fail git submodule deinit 命令,当它检测到子模块当前 HEAD 不匹配它自己的内部远程跟踪分支(它自己的 origin/master 例如)