如何继续删除子模块,但保留其历史记录(从父历史记录链接)?
How to remove a submodule going forward, but keep its history (as linked from parent history)?
假设我有一个项目有一个使用 git submodule
实现的依赖项。现在我正在改变不再需要这种依赖的地方。我想提交如下工作的更改:
- 如果有人签出此提交或任何后代,则子模块不存在。
- 但是如果有人签出一个旧的提交,或者另一个分支上的提交没有与这个提交合并,子模块会重新出现,就像删除的文件一样。
- 必须保留子模块自己的 git 数据库 (.git/modules/path/to/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
例如)
假设我有一个项目有一个使用 git submodule
实现的依赖项。现在我正在改变不再需要这种依赖的地方。我想提交如下工作的更改:
- 如果有人签出此提交或任何后代,则子模块不存在。
- 但是如果有人签出一个旧的提交,或者另一个分支上的提交没有与这个提交合并,子模块会重新出现,就像删除的文件一样。
- 必须保留子模块自己的 git 数据库 (.git/modules/path/to/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
例如)