Git 摆脱部分子模块状态

Git 摆脱部分子模块状态,git,repository,git-submodules,Git,Repository,Git Submodules,我有一个目录树,其中包含一个git存储库(我当时没有想到)。然后在两个目录中,我做了一个git init,并尝试将所有内容添加到树中。它没有在subdir中添加已经有.git目录的文件,但我仍然没有注意到这一点,只是添加了这个目录。(我不确定我到底输入了什么,但当时我觉得现在一切都完成了,尽管我仍然有点好奇为什么在顶部添加并没有添加所有内容;但当时我放弃了这个想法。) 现在我注意到,克隆外部存储库不会签出内部存储库中的文件。经过一些调查,我发现内部存储库似乎是外部存储库的一个子模块,但不知何故不

我有一个目录树,其中包含一个git存储库(我当时没有想到)。然后在两个目录中,我做了一个
git init
,并尝试将所有内容添加到树中。它没有在subdir中添加已经有
.git
目录的文件,但我仍然没有注意到这一点,只是添加了这个目录。(我不确定我到底输入了什么,但当时我觉得现在一切都完成了,尽管我仍然有点好奇为什么在顶部添加并没有添加所有内容;但当时我放弃了这个想法。)

现在我注意到,克隆外部存储库不会签出内部存储库中的文件。经过一些调查,我发现内部存储库似乎是外部存储库的一个子模块,但不知何故不是一个合适的存储库

git子模块
git状态
git日志
这样的事情永远不会提及该内部存储库,但尝试将文件从内部存储库添加到外部存储库时,总是会声明:
fatal:Path'Path/to/innerRepository/somefile'位于子模块'Path/to/innerRepository'中。
,即使我删除了内部的
.git
目录

我现在想要实现的是消除以下信息:内部存储库的目录(及其所有内容)是另一个存储库的一部分。我想忘记旧的存储库,将文件签入新的存储库


如何才能做到这一点?

删除内部.git文件夹不足以让父repo相信某个路径不是子模块

path/to/innerRepository
可能作为

试一试

(如果没有.gitmodules,则应该失败)

以及:


最后一个命令应该使您的父repo“忘记”该子模块。

在询问此问题之前,我在其他地方阅读了关于
deinit
;对不起,我没提。您建议的
deinit
行导致一个错误:
错误:pathspec'deinit'与git已知的任何文件都不匹配。
看起来我的git版本(1.7.9.5)太旧了,不知道该命令?@Alfe是的,升级会很好。但是不要忘记,如果没有
.gitmodules
文件,该命令无论如何都会失败。最重要的命令是
git-rm--cached
:这是一个在这里进行筛选的命令。这
git-rm
会实际删除任何文件吗?由于git不知道这些文件,我想它不会删除这些文件,对吧?@Alfe-no
git rm--cached
仅从索引中删除,而不是从磁盘中删除。记住:没有尾随斜杠
git-rm--cached path/to/innerRepository
@Alfe你试过吗?它起作用了吗?身份消失了吗?
git submodule deinit path/to/innerRepository
git rm --cached path/to/innerRepository  # no trailing slash