git 对象树如何损坏?



当像往常一样拉取我的存储库时(通过一个简短的C程序拉取许多存储库,无论是否发生了更改(,其中一个打印了以下消息:

error: object file .git/objects/eb/4384d0e2460629d912635ec622beb979024316 is empty
error: object file .git/objects/eb/4384d0e2460629d912635ec622beb979024316 is empty
fatal: loose object eb4384d0e2460629d912635ec622beb979024316 (stored in .git/objects/eb/4384d0e2460629d912635ec622beb979024316) is corrupt
fatal: The remote end hung up unexpectedly

在存储库中执行git status时打印相同的消息(没有最后一行(。

这个问题不是关于如何恢复数据或类似的东西。这是关于理解这是如何发生的。

存储库只有 1 个遥控器,只有我使用此遥控器(通过多台机器(。我在这个仓库中直接在 master 上工作,没有其他分支。遥控器可通过 ssh 访问。当时拉了 35 个回购,只有这一个回购破产了。

此存储库中的最后一次更改似乎是在发生错误的计算机上进行的,并且已经提交并推送到远程。

我从事实中猜测这一点,远程中的最新提交是我会在存储库损坏的机器上执行的操作,并且它中断后的工作目录不包含任何更改,因为如果我再次克隆git status报告干净的存储库从远程并将损坏的存储库的工作目录复制到新克隆。不幸的是,我不能在损坏的存储库上使用git log,因为它只打印上述错误消息(当然没有最后一行(。

回购什么时候像这样破裂?对我来说,回购似乎处于绝对不会发生任何事情的完美状态。


应该重要:损坏的存储库位于Ubuntu 16.04(内核4.8.0-58-generic(笔记本电脑上的主文件夹中,该笔记本电脑使用ext4分区和Ubuntu的默认主文件夹加密(eCryptfs(。

这是我用来拉取的程序的源代码:https://pastebin.com/bBTz4vH2

通常由 git 操作引起的错误消息突然中止。

您只需删除本地 git 存储库.git/objects/eb文件夹中4384d0e2460629d912635ec622beb979024316的空对象。然后运行 git 命令(如git statusgit pull(以检查它是否正常工作。

最新更新