Git - “<directory> does not have have commit check out”,即使在删除该目录中的 .git 后也是如此。无法摆脱内部 git 存储库

Git - "<directory> does not have a commit checked out" even after deleting the .git inside that directory. Cant get rid of inner git repo

提问人:Saif eldeen Adel 提问时间:4/29/2021 更新时间:4/29/2021 访问量:6832

问:

好吧,这会有点令人困惑,但请耐心等待。仍然习惯了 git 和我挣扎。所以。事件的顺序如下(非常忙碌,所以总结得不好)

我有一个带有后端和前端的项目。前端目录有一个 React 应用程序 (),默认情况下,它有一个初始化的应用程序。frontend/financee-app/.git

但是我愚蠢的自己忘记删除该内部存储库,然后为整个项目初始化 git 存储库并提交和推送我的代码。

所以很自然地,我无法在 github 上打开那个 react 应用程序文件夹,因为从我学到的到现在,它现在是一个“子模块”吗?这意味着 git 存储库中有一个 git 存储库。

但是经过这么多的挣扎和弄乱我的文件,我用我拥有的备份文件替换了我的文件,这些文件与我最初提交的文件结构几乎相同。但是我确保这次 react 应用程序中没有内部 git 存储库。

所以我 git 拉出我的代码看看有什么区别,它告诉我有三个混淆。两个文件中的两个。我修复,没问题。第三个冲突是该死的 react 应用程序目录。Idk 如何修复它,所以我只修复其他两个,确保我在该应用程序目录中没有 git 存储库,然后我终于.git add *

安恩德。错误。

error: 'frontend/financee-app' does not have a commit checked out
fatal: updating files failed

到处搜索这个错误,每个人都在说要删除内部 git 存储库。但我已经做到了。它是否检测到我第一次错误地推送了导致所有这些问题的那个?如果我想永远摆脱它怎么办。我只想提交这个里面没有 git 存储库的新文件夹。我发誓这就是我想做的一切。为什么这么难。

git github git-submodules git-merge-conflict

评论


答:

1赞 torek 4/29/2021 #1

所以很自然地,我无法在 github 上打开那个 react 应用程序文件夹,因为从我学到的到现在,它现在是一个“子模块”吗?

没错。

这意味着 git 存储库中有一个 git 存储库。

那是。。。不太对。Git 不能在存储库中保存存储库——或者在这里可能不是一个更好的词,因为原因只是部分技术原因——所以子模块不是存储库中的存储库,而是对存储库内某个存储库引用。也就是说,如果我们将外部 Git 存储库指定为 R(存储库),将内部存储库指定为 S(子模块),那么 R 包含的不是 S 本身,而是一些指示或指令:“找到 S 并克隆它。然后,在 S 中查看提交 C

说明/说明只是一个文本文件。它们存储在名为 ;当您克隆 R 并使用 时,Git 会读取文件并尝试按照说明克隆 S。如果中的说明正确,产生 S。R 根本不包含 SR 只有指令。 .gitmodulesgit submodule init.gitmodules

按照说明进行操作后,存储库 R 的设置和提交现在具有记录 S 子模块性的信息,这就是问题所在。

为了阻止 R 认为 S 是一个子模块,你必须告诉 Git 它不是。有一个非常大的(而且很旧,2009 年 8 月)的 StackOverflow 问题和答案:如何删除子模块?这个过程曾经很糟糕,但自 2009 年以来已经得到改进。请参阅 VonC 接受的答案

error: 'frontend/financee-app' does not have a commit checked out
fatal: updating files failed

R 仍然认为 S 作为子模块存在时,您将看到这种症状。

评论

0赞 Saif eldeen Adel 4/29/2021
对不起,我会问一些愚蠢的问题,但我希望你能忍受我。首先,感谢您的冗长回答。现在更有意义了。但是,我正在努力找到的是文件,我在 R 中没有一个文件,并且 S 文件夹已被删除。我将查看删除子模块的答案,它看起来很混乱,我希望我能弄清楚。.gitmodules
0赞 Saif eldeen Adel 4/29/2021
而且我从未初始化过子模块。我需要从具有该子模块文件夹的 github 克隆存储库吗?然后执行这些删除说明?不过,我如何能够从那里推动我的更改
1赞 torek 4/29/2021
无论如何运行;如果它抱怨,就不会造成伤害。然后运行 (replace 为 submodule 的名称,在本例中为 ),假设您使用的是类 Unix 系统,因此您有 .有了它,即使它什么都不做,它也不会抱怨。在这一点上,前两个步骤很可能都无济于事。第 3 步将产生收益:(同样,在本例中,您将替换这些)。git submodule deinitrm -rf .git/modules/a/submodulea/submodulefrontend/financee-apprm-fgit rm -f a/submodulefrontend/financee-app
0赞 Saif eldeen Adel 4/29/2021
你是救命恩人。您链接的答案。就是这样。无论如何,我确实运行了deinit,并且确实删除了该文件夹。然后我用我拥有的备份文件夹替换了它,该文件夹几乎是相同的文件夹。然后承诺和推动。没问题。非常感谢。已经好几个小时了。奇怪的一件事是我没有模块文件夹,所以我只是跳过了那部分......因为无论如何都要删除它。它奏效了。非常感谢。已经好几个小时了