由于缺少对象,Git损坏怎么办?

Cob*_*bby 11 git corruption

我刚刚在另一台远程服务器上克隆了一个存储库并遇到了一个试图这样做的问题:

git clone git@codebasehq.com:blah/blah/docs.git
Cloning into docs...
remote: Counting objects: 343, done.
remote: error: unable to find 14f87a739828e4d489b0310a51e057b30333926e
remote: Compressing objects: 100% (325/325), done.
error: git upload-pack: git-pack-objects died with error.   
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: fatal: unable to read 14f87a739828e4d489b0310a51e057b30333926e
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed
Run Code Online (Sandbox Code Playgroud)

我做了一点研究并发现了git fsck,这是输出:

$ git fsck --full
error: sha1 mismatch 14f87a739828e4d489b0310a51e057b30333926e

error: 14f87a739828e4d489b0310a51e057b30333926e: object corrupt or missing
missing blob 14f87a739828e4d489b0310a51e057b30333926e
Run Code Online (Sandbox Code Playgroud)

所有其他有类似问题的人都有链接问题或其他问题.我对Git还是比较新的,有谁知道如何解决这个问题?

我仍然可以推送到我的中央远程存储库,但我无法克隆它.

14f87a739828e4d489b0310a51e057b30333926e是一个blob,它是存储库根目录中的markdown文件.我尝试删除此文件并推送这些更改无济于事.


编辑:是否可以从另一个仓库导入git历史记录?我想我可以启动一个新的repo并将我的文件复制到其中,然后导入提交历史记录.

Jan*_*dec 1

简单的推送并不能解决这个问题,因为 git 看到它有引用损坏文件的提交,并且会假设它有它需要的所有对象。

您的项目是否有另一个存储库未报告任何 fsck 问题(并且包含有问题的文件)?例如在您的本地机器上?比你应该尝试:

  1. 将损坏的存储库放在一边。
  2. 将好的存储库克隆到它的位置。
  3. 从其他存储库或旧存储库推送旧存储库的任何分支。

由于这种错误意味着磁盘上的文件已损坏,因此我建议您对文件系统、磁盘和内存进行彻底检查(当 git 保存数据时,数据可能会在内存中损坏)。

注意:虽然所有磁盘都至少有一些校验和,但大多数内存芯片根本没有,因此内存故障比磁盘故障更有可能未被检测到。memtest86+是检查内存的好方法。