假设我有一个项目,这个项目的依赖关系是通过使用 git submodule
. 现在我正在做一个改变,不再需要这个依赖关系。我想提交一个变化,如下所示。
换句话说,我做了 不 想按照以下答案的指示删除子模块。如何删除一个子模块?. 其实我写这个问题是为了说明这个问题的反面教材[1] 。
当我有时间的时候,我会尝试一些实验。它可能是简单的 git submodule deinit
或将其条目从 .gitsubmodules
. 我在Stack Overflow上搜索了一下,没有发现任何针对这个案例的问题或答案。即使是写得极好的 掌握Git子模块 是不清楚的。
[1]: 这些答案中所需要的许多步骤告诉我 这种抹杀是不 "正常 "的 否则git就会包含一个瓷器命令来帮你完成所有的工作 相反 git deinit
是提供非常狭窄的行为。我认为这是非常有意的。
这个 git submodule deinit
我在2013年记录的 及其相关的 rm -rf .git/modules/a/submodule
都假设被移除的子模块已经被推送了。
子模块最初被引入是作为只读使用的,为了让其他版本库的内容进入你的版本库,不一定要修改它们。这个 不同于子树在这里,修改是更自然的预期。
也就是说,是的,如果你在删除一个子模块的同时,还没有对该子模块进行推送的本地修改,那么最终的结果将不会令人满意。
一个可能的补丁想法是,当git子模块检测到子模块当前的HEAD与它自己的内部远程跟踪分支(它自己的)不匹配时,阻止fail git子模块deinit命令。origin/master
例如)