Git状态返回“fatal: Not a git repository”,但存在.git目录。

11
我有一个远程文件夹,目前无法进行推送。当我直接进入远程目录并执行“git status”时,它显示如下错误信息:“fatal: Not a git repository”。虽然.git文件夹存在且昨天它还能正常工作,并且没有任何更改。请问是否有人知道出现这种情况的原因是什么?感谢您提前提供帮助,非常感激!

2
.git目录缺少权限? - Rufinus
如果不是@Rufinus恰当建议的问题,可能是文件系统损坏... - Romain
当您尝试推送时,您会收到什么消息? - havexz
谢谢您的回复。我已经将权限与同一服务器上的另一个.git存储库进行了比较,它们完全匹配。 - BIOSTALL
推送时出现的错误如下:致命错误:'/var/www/vhosts/X.co.uk/httpdocs':无法更改目录或不是 git 存档 正在将内容推送到 root@X.co.uk:/var/www/vhosts/X.co.uk/httpdocs 致命错误:远程终端意外挂断 - BIOSTALL
你可以运行 git --config -l 命令并将与远程相关的行放在一起吗? - havexz
2个回答

9
如果.git文件夹的权限正确,请查看是否存在一个名为.git/HEAD的文件,或者它的名称不正确,例如.git/head。存在.git/HEAD(或裸仓库中的HEAD)是检查git存储库的次要检查。

3
如果存在 .git/HEAD,但仍然遇到此错误,请确保 .git/HEAD内容指向有效的引用。如果 Git 无法解析内容,则会输出该存储库无效的信息。 - koppor
2
“.git/HEAD不存在?”(在我的情况下只有“.git/ORIG_HEAD”存在),我遇到了与OP相同的问题。 - Sean Ahrens
@SeanAhrens 我的 HEAD 文件损坏了,但是我的 ORIG_HEAD 文件还好。将后者复制到前者上解决了我的问题,并使我回到了正确的状态。完成后,您可以运行 git reflog 查看最近的 HEAD 位置,以防需要重置到不同的提交。 - Drew Noakes
在进行这样的手动恢复后,最好运行 git fsck --full 命令来检查是否存在任何损坏。 - Drew Noakes
什么原因会导致git无法找到git仓库,即使.git文件夹存在且HEAD内容正确?也就是说,第三次检查是什么? - undefined

1
将远程仓库克隆到另一个文件夹并比较.git文件夹,这将提示您有关缺失或损坏文件的信息。您可能会看到objects文件夹中的差异,可以忽略它。

通过这样的测试,objects文件夹中的差异不一定是问题。 - Drew Noakes
正确,但在其他文件夹和文件中可能会指出问题所在。 - yorammi
@DrewNoakes,我已经根据你的评论更新了我的回答。谢谢! - yorammi
多个文件的内容可能会因为检出了哪个分支/提交、有多少个远程仓库以及对仓库进行了什么操作而不同。HEADORIG_HEADpacked-refsconfigCOMMIT_EDITMSG等等都可能不同,但这并不意味着存在问题。我点赞你的回答是因为它很有趣,但我不确定这样的差异能给想要解决损坏问题的人提供什么可行的信息。当我的仓库损坏时,我来到这里,检查HEAD文件是否包含有效的SHA-1提示让我很幸运地解决了问题。 - Drew Noakes

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