如何将子模块转换为嵌入式存储库

How to transform a submodule to an embedded repository

我曾经在 git 存储库 (main) 中有一个 git 存储库 (sub)。当时我很开心。但是,一个悲伤的日子,在过度工程热潮的火花中,我决定把它变成一个子模块。现在我想回到过去的美好时光:将子模块转换回一个简单的子文件夹,在 sub/.git 目录中跟踪该项目的历史,而不是将其放在主存储库的 .git/modules/sub 中文件夹。我该怎么做?

git rm --cached subgit submodule deinit 都将历史记录保存到 .git/modules/sub 而不是将其移动到 sub/.gitThis question about un-submoduling differs from mine as it wants to integrate the submodule history into the main repository’s history, whereas I want to keep them separate. Reading the answers about removing a submodule,我也找不到如何保留子模块的历史并将其传输到嵌入式存储库而不是完全丢失它。

请注意,我不想将 sub 的历史记录完全推送到其相应的远程:我想保留一些本地分支(出于保密原因)。所以,sub的地方历史是弥足珍贵的。我不能简单地从 main 中删除与 sub 相关的所有内容并再次从远程克隆(另外,从网络中获取我在本地已有的内容是不雅的,我宁愿避免它,除非它大大简化了流程)。

出于简单原因,我想这样做,因为我不想在 main 中保留对 sub 的特定“当前”提交的引用。目前,每次我在 sub 中向前移动 master 分支时,main 都会意识到子模块中发生了某些变化,并且让我对更新子模块感到烦恼。

首先检查 .git/modules/sub 是否可以重命名为 sub/.git

您必须编辑新的 sub/.git/config 文件,以删除 core.worktree 设置。

但是你应该在那里看到你完整的子历史记录。