我有一个运行良好的 Git 存储库,直到突然出现:
$ git status
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
.git 目录和所有文件仍然存在:
$ ls -l .git
total 48
drwxr-xr-x 2 nikratio nikratio 2 Jan 16 2016 branches/
-rw-rw-r-- 1 nikratio nikratio 612 Jan 19 10:17 COMMIT_EDITMSG
-rw-rw-r-- 1 nikratio nikratio 553 Nov 24 2019 config
-rw-r--r-- 1 nikratio nikratio 73 Jan 16 2016 description
-rw-r--r-- 1 nikratio nikratio 188 Feb 28 09:41 FETCH_HEAD
-rw-r--r-- 1 nikratio nikratio 11876 Mar 7 2016 gitk.cache
-rw-rw-r-- 1 nikratio nikratio 23 Feb 28 09:41 HEAD
drwxr-xr-x 2 nikratio nikratio 11 Jan 16 2016 hooks/
-rw-rw-r-- 1 nikratio nikratio 2764 Feb 28 09:41 index
drwxr-xr-x 2 nikratio nikratio 4 Feb 1 2020 info/
drwxr-xr-x 3 nikratio nikratio 4 Feb 1 2020 logs/
drwxr-xr-x 41 nikratio nikratio 41 Feb 28 09:41 objects/
-rw-rw-r-- 1 nikratio nikratio 41 Feb 28 09:41 ORIG_HEAD
-rw-rw-r-- 1 nikratio nikratio 3321 Feb 1 2020 packed-refs
drwxr-xr-x 5 nikratio nikratio 5 Aug 6 2017 refs/
drwxrwxr-x 2 nikratio nikratio 5 Nov 3 2019 sequencer/
$ cat .git/HEAD
dfd4cba3856cea89037f1e8⏎
我如何才能知道损坏的程度,以及到底是什么被损坏了?
答案1
这些数据看起来不正确:
$ cat .git/HEAD
dfd4cba3856cea89037f1e8⏎
'HEAD' 是指向当前签出的提交的指针。如果您签出了分支提示,则此文件应包含ref: refs/heads/master
(例如“主”分支)。您可以使用 更新它echo
。
(如果您已签出非提示提交或标签,则 HEAD 将直接包含该提交的十六进制哈希值 - 但是,对于当前正在使用的 SHA1 存储库,它将恰好是 40 位数字。您的看起来就像它应该是一个提交哈希,但是太短了。)
“ref:” 后面的 ref 名称也需要存在,要么作为实际文件(.git/refs/heads/master
在此示例中),始终包含 40 位提交哈希,要么作为 中的一行.git/packed-refs
。
修复 .git/HEAD 后,请务必运行git fsck
以验证存储库的剩余内容。我怀疑对象目录中可能还有更多文件损坏。