Git 子模块突然不再被识别为有效的 repo,.git/modules/[submodule] 中的一些文件丢失
Git submodule suddenly no longer recognized as valid repo, some files in .git/modules/[submodule] missing
我一直遇到和this question类似的问题,而且好像也是突然出现的;然而,对我来说,这似乎是由于子模块而发生的——我在主项目中遇到的 运行 git status
错误是
fatal: not a git repository: [submodule]/../.git/modules/[submodule]
当我试图检查 [submodule]/.git
或 .git/modules/[submodule]/config
中的路径是否按照 this answer to a similar question 中的建议发生了什么时,我发现后者不存在,而且更多失踪。具体来说,对我来说 .git/modules/[submodule]
的唯一内容是 refs
和 objects
目录以及 packed-refs
.
我已经尝试按照 a comment on the first question 中的建议添加一个 HEAD,但无法完全弄清楚要将什么作为 ref
- 一个简单的 refs/heads/foo
(其中 heads/foo
存在于 .git/modules/[submodule]
的 refs
目录中,我检查了那么多)因
而失败
fatal: bad object HEAD
fatal: 'git status --porcelain=2' failed in submodule
并试图将其指向 [submodule]../.git/modules/[submodule]/refs/heads/foo
只会给我原来的错误。我可以回到可用的子模块吗?如果可以,怎么办?对于子模块,幸运的是有一个包含所有更改的远程仓库,主项目的 most 也是如此(我正在尝试一些我还没有跟踪过的东西,所以宁愿不用核武器...)。
已解决(在来自@torek 之后):
我首先通过手动执行描述的步骤 here 删除了子模块(以避免 git 可能在 no-longer-a-repo 子目录上窒息):手动删除 [submodule]
来自 .git/config
的部分,并删除 .git/modules/[submodule]
以及带有子模块的目录。在这一点上,主要项目表现得像
再次回购,所以我可以进行最后一次更改(使用 git add [submodule]
)以从索引中获取子模块。
之后,我可以用 git submodule add [url/to/submodule]
.
重新添加子模块
我一直遇到和this question类似的问题,而且好像也是突然出现的;然而,对我来说,这似乎是由于子模块而发生的——我在主项目中遇到的 运行 git status
错误是
fatal: not a git repository: [submodule]/../.git/modules/[submodule]
当我试图检查 [submodule]/.git
或 .git/modules/[submodule]/config
中的路径是否按照 this answer to a similar question 中的建议发生了什么时,我发现后者不存在,而且更多失踪。具体来说,对我来说 .git/modules/[submodule]
的唯一内容是 refs
和 objects
目录以及 packed-refs
.
我已经尝试按照 a comment on the first question 中的建议添加一个 HEAD,但无法完全弄清楚要将什么作为 ref
- 一个简单的 refs/heads/foo
(其中 heads/foo
存在于 .git/modules/[submodule]
的 refs
目录中,我检查了那么多)因
fatal: bad object HEAD
fatal: 'git status --porcelain=2' failed in submodule
并试图将其指向 [submodule]../.git/modules/[submodule]/refs/heads/foo
只会给我原来的错误。我可以回到可用的子模块吗?如果可以,怎么办?对于子模块,幸运的是有一个包含所有更改的远程仓库,主项目的 most 也是如此(我正在尝试一些我还没有跟踪过的东西,所以宁愿不用核武器...)。
已解决(在来自@torek
我首先通过手动执行描述的步骤 here 删除了子模块(以避免 git 可能在 no-longer-a-repo 子目录上窒息):手动删除 [submodule]
来自 .git/config
的部分,并删除 .git/modules/[submodule]
以及带有子模块的目录。在这一点上,主要项目表现得像
再次回购,所以我可以进行最后一次更改(使用 git add [submodule]
)以从索引中获取子模块。
之后,我可以用 git submodule add [url/to/submodule]
.