如何恢复删除的.git/modules文件夹

5
在我的项目中,.git/modules 文件夹已被删除。现在我能够将父分支重置为其他版本,但子模块更新无法正常工作。
我收到的错误信息如下:
fatal: Not a git repository: ../.git/modules/abc.
Unable to find current revision in submodule path 'abc'

如何恢复已删除的文件夹并将子模块与父分支保持同步。

仓库结构如下:

parent_folder---|---abc
                |---def

abc 和 def 是子模块。

2个回答

5

您需要再次初始化并更新子模块,

git submodule init
git submodule update

它应该下载并更新当前子模块的代码。

如果仍然不起作用,请尝试删除子模块,然后再次添加:

git submodule add <params>

如果这样仍无法解决问题,使用--force标志添加子模块。

如果指定了--force,则将检出子模块(如适当,则使用git checkout --force),即使包含存储库的索引中指定的提交与子模块中检出的提交匹配。


第一种方法没有起作用。在添加子模块时,它报错说索引已经存在。所以我删除了所有内容并执行了子模块初始化和子模块更新。代码出现了,但我失去了之前的子模块分支。有没有办法恢复它们? - Daemon
你删掉文件夹了吗?如果你删除了文件夹内容,你需要从服务器上拉取它们。 - CodeWizard
是的,我按照示例中的说明删除了abc和def文件夹。在abc文件夹中有一些正在使用的分支,但我没有进行git push操作。 - Daemon

0

我在CodeWizard的回答上进行了扩展。

如果你得到了以下错误信息:

fatal: No URL for Submodul-Path 'app/design/Foo/Bar' in .gitmodules found

那么请执行 git rm app/design/Foo/Bar 或者 git rm --cached app/design/Foo/Bar,然后再试一次。

如果你接着得到以下错误信息:

fatal: Could not find repository-handle for Submodul 'app/code/Foo/Bar'.

那么很可能是因为你在 .git/modules 中删除了该文件夹。

子模块中的.git文件只是一个“虚假”的文件,它引用了.git/modules中的真实 git 存储库。它不是一个真正的存储库。如果你打开它,你会看到:

gitdir: ../../../../.git/modules/app/code/Foo/Bar

所以只需删除文件夹 "app/code/Foo/Bar",然后再试一次。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接