git - 如何继续删除子模块,但保留其历史记录(与父历史记录链接)?
问题描述
假设我有一个使用git submodule
. 现在我在不再需要这种依赖的地方做出改变。我想进行如下更改:
- 如果有人签出此提交或任何后代,则该子模块不存在。
- 但是,如果有人签出一个较旧的提交,或者另一个未与该提交合并的分支上的提交,则子模块会重新出现,就像删除的文件一样。
- 必须保留子模块自己的 git 数据库(.git/modules/path/to/submodule),因为它可能包含未推送到远程的提交。
换句话说,我不想按照如何删除子模块?. 事实上,我写这个问题是为了澄清那个问题。 [1]
当我有时间时,我会尝试一些实验。它可能像git submodule deinit
和/或从 中删除其条目一样简单.gitsubmodules
。我搜索了 Stack Overflow 并没有找到专门针对此案例的问题或答案。即使是写得很好的掌握 Git 子模块也不清楚这一点。
[1]:这些答案中所需的许多步骤告诉我,这种删除不是“正常的”,否则 git 将包含一个为您完成所有操作的瓷器命令。而是git deinit
提供了非常狭窄的行为。我认为这是非常故意的。
解决方案
git submodule deinit
我在 2013 年记录的 2013及其相关 文件rm -rf .git/modules/a/submodule
都假定已删除的子模块已被推送。
最初引入子模块以用作只读,以便将其他存储库内容放入您的存储库,而不必修改它们。
这与 subtree 不同,后者更自然地期望修改。
话虽如此,是的,如果您在没有提交/推送本地更改到所述子模块的情况下删除子模块,最终结果将不会令人满意。
origin/master
一个可能的补丁想法是在 git submodule deinit 命令检测到子模块当前 HEAD 与其自己的内部远程跟踪分支(例如它自己的)不匹配时阻止/失败
推荐阅读
- android - 如何计算firebase中子节点内的值的总和?
- java - 如何反编译 groovy 类文件?
- docker - 无法从 logstash docker 容器连接到 kafka docker 容器
- r - 如何使用因子数据创建表格
- c# - ASP.NET Web API - 多个长时间运行的 API 调用最佳实践?
- android - 如何在 Android 10 中创建公共文件夹/文件
- java - 如何获取使用 ASM 初始化对象的位置?
- visual-studio - WPF框架的使用
- ios - 在 SwiftUi 中使用用户输入来执行计算
- jupyter-notebook - jupyter-notebook 修改 config_path 以删除系统范围的路径