如何从Git中的损坏松散文件中恢复数据

6

我有一个损坏的 git 对象。在 git objects 目录中,该文件的大小为 0。

首先进行 fsck:

git fsck --full
fatal: loose object a35c1489005cca1ffeb3c2d3e4d63988408b6a24 (stored in .git/objects/a3/5c1489005cca1ffeb3c2d3e4d63988408b6a24) is corrupted

然后是ls命令:

ls -l .git/objects/a3/5c1489005cca1ffeb3c2d3e4d63988408b6a24
----------+ 1 sampath ???????? 0 Sep 13 15:26 .git/objects/a3/5c1489005cca1ffeb3c2d3e4d63988408b6a24

该文件在磁盘上不存在!

# git cat-file -t a35c1489005cca1ffeb3c2d3e4d63988408b6a24
error: unable to find a35c1489005cca1ffeb3c2d3e4d63988408b6a24
fatal: git cat-file a35c1489005cca1ffeb3c2d3e4d63988408b6a24: bad file

我第一次遇到这个错误是在尝试拉取代码时。
我试过删除文件并尝试拉取,但是没有成功。它抱怨说文件不存在。
当我删除文件并运行fsck时,它显示了很多悬空对象。
# git fsck --full
broken link from  commit 1e5980c224ff19b19ad99dbefed4c7c64c58aee6
              to    tree a35c1489005cca1ffeb3c2d3e4d63988408b6a24
dangling tree 0401d636a512b208dffd6ac6e153ab0a061f8d5d
dangling blob 58014c0266784a1e3cc1502de82837c5f36c8514
dangling tree 0507fa56260c693cea678eab0343240c5bba06ad
dangling tree 130770880c664a0b0cf5a21d037cbdba7480dc90

我尝试回退几个提交,但没有帮助。
有什么指示可以帮忙解决这个问题吗?


1
你有代码库的副本吗?如果有,请从那里获取对象。既然你正在从某个地方拉取它,希望你在那个代码库中有该对象。 - Andy
这个链接可能有帮助:https://dev59.com/PnRA5IYBdhLWcg3w2x2W (当然,如果你有那个仓库的备份的话) - VonC
我尝试过这个。我克隆了存储库并解压缩了对象。但我找不到大小为0的松散对象文件。这是否意味着它属于我的一些本地提交,但尚未推送到远程? - Sampath Herga
可能是Git:“损坏的松散对象”的重复问题。 - user456814
1个回答

1

看起来树已经损坏了。如果你知道这些提交周围的结构,你可以猜测它是什么。希望你能推断出哪些文件被添加或删除了。你的 blobs 和其他树也将会悬空。如果你真的想从中恢复并且没有其他克隆库,仍然有可能,但需要一些时间、精力和运气。

希望这能帮到你。


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