我刚刚在另一台远程服务器上克隆了一个存储库,并遇到了一个试图这样做的问题:
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
我做了一些研究,发现了git fsck
,这是输出:
$ git fsck --full
error: sha1 mismatch 14f87a739828e4d489b0310a51e057b30333926e
error: 14f87a739828e4d489b0310a51e057b30333926e: object corrupt or missing
missing blob 14f87a739828e4d489b0310a51e057b30333926e
所有其他有类似问题的人都有链接问题或其他问题。我对Git还是比较新的,有谁知道如何解决这个问题?
我仍然可以推送到我的中央远程存储库,但我无法克隆它。
14f87a739828e4d489b0310a51e057b30333926e
是一个blob,它是存储库根目录中的markdown文件。我尝试删除此文件并推送这些更改无效。
修改:是否可以从其他仓库导入git历史记录?我想我可以启动一个新的仓库并将我的文件复制到其中,然后导入提交历史记录。
答案 0 :(得分:3)
这是几乎相同的问题,有一个非常详细的解决方案:Github Repo Corruption - Sha1 Collision
答案 1 :(得分:3)
如果它只是一个文件并且尚未打包,您应该能够在本地存储库的.git/objects/14/f87a739828e4d489b0310a51e057b30333926e
中找到它。您可以将此文件复制到服务器上存储库中的相应目录。
如果打包,您应该可以使用git unpack-objects
在.git/objects/pack/
中的一个打包文件上解压缩。之后,复制到服务器的工作方式如上所述。
答案 2 :(得分:1)
简单推送不会解决这个问题,因为git看到它有提交引用损坏的文件并假设它具有所需的所有对象。
您是否有另一个存储库,该项目不会报告fsck的任何问题(并且有相关文件)?例如。在你的本地机器上?比你应该尝试:
由于这种错误意味着磁盘上的文件已损坏,我建议你对文件系统,磁盘和内存进行彻底检查(当git是时,内存中的数据可能会被破坏拯救他们。)
注意:虽然所有磁盘至少都有一些校验和,但大多数内存芯片都没有,所以内存故障比磁盘故障更容易被检测到。 memtest86+是检查记忆的好方法。