我正在调试一个git存储库损坏的案例,它是由硬盘故障引起的。我有过
>git fsck --full
fatal: loose object 25e9d8d2deb964c3da0f86f60bbd5a23e8387349 (stored in
.git/objects/25/e9d8d2deb964c3da0f86f60bbd5a23e8387349) is corrupt
>git show 25e9d8d2deb964c3da0f86f60bbd5a23e8387349
fatal: loose object 25e9d8d2deb964c3da0f86f60bbd5a23e8387349 (stored in
.git/objects/25/e9d8d2deb964c3da0f86f60bbd5a23e8387349) is corrupt现在,我想知道一些关于这个物体的事情--它是什么,它属于哪里?(哪个文件夹,哪个提交?)
当我尝试研究它存储在其中的对象时,我得到:
>git show e9d8d2deb964c3da0f86f60bbd5a23e8387349
fatal: ambiguous argument 'e9d8d2deb964c3da0f86f60bbd5a23e8387349': unknown revision or
path not in the working tree. Use '--' to separate paths from revisions我应该如何继续?
我有一个今天早些时候的存储库的副本,但我不想只丢弃我的本地更改-我更愿意看看我是否可以修复存储库,或者只丢弃一次提交。
附注-我找到了几个关于“松散对象”问题的帖子,但没有关于如何调查/解决的具体说明,无论是在另一个存储库中找到损坏对象的备份的情况下,还是在没有该对象的备份的情况下。
附言2-奇怪的是,gitk --all运行得很好,并不关心这种损坏状态。
发布于 2012-02-21 06:08:28
消息“loose object 25e9d8d2deb964c3da0f86f60bbd5a23e8387349”已经告诉您这个对象的确切散列;它是25e9d8d2deb964c3da0f86f60bbd5a23e8387349。Git只是通过分离单独目录的前两个字符来对子目录中的对象进行组织。因此,该对象存储在/25/e9d8d2deb964c3da0f86f60bbd5a23e8387349中,但这不会改变它的标识符是完整的散列。
因此,您只需要使用git show 25e9d8d2deb964c3da0f86f60bbd5a23e8387349。然而,由于对象已损坏,此操作失败,因此没有真正的方法来恢复它。
然而,好消息是“松散对象”意味着没有任何东西指向它,所以如果你的存储库没有问题,你就不需要这个对象了。
奇怪的是,
都运行得很好,并不关心这种损坏的状态。
gitk -以及几乎所有来自Git的其他用户命令-只查看可从HEAD或另一个命名引用(分支、标签)到达的对象。因此,如果有一个松散的对象,没有任何东西指向它,尤其是头和另一个命名引用都没有指向它,并且不会出现错误。
https://stackoverflow.com/questions/9368967
复制相似问题