首页 > 解决方案 > 如何继续删除子模块,但保留其历史记录(与父历史记录链接)?

问题描述

假设我有一个使用git submodule. 现在我在不再需要这种依赖的地方做出改变。我想进行如下更改:

换句话说,我不想按照如何删除子模块?. 事实上,我写这个问题是为了澄清那个问题。 [1]

当我有时间时,我会尝试一些实验。它可能像git submodule deinit和/或从 中删除其条目一样简单.gitsubmodules。我搜索了 Stack Overflow 并没有找到专门针对此案例的问题或答案。即使是写得很好的掌握 Git 子模块也不清楚这一点。


[1]:这些答案中所需的许多步骤告诉我,这种删除不是“正常的”,否则 git 将包含一个为您完成所有操作的瓷器命令。而是git deinit提供了非常狭窄的行为。我认为这是非常故意的。

标签: gitgit-submodules

解决方案


git submodule deinit我在 2013 年记录的 2013及其相关 文件rm -rf .git/modules/a/submodule都假定已删除的子模块已被推送。

最初引入子模块以用作只读,以便将其他存储库内容放入您的存储库,而不必修改它们。
与 subtree 不同,后者更自然地期望修改。

话虽如此,是的,如果您在没有提交/推送本地更改到所述子模块的情况下删除子模块,最终结果将不会令人满意。

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


推荐阅读