2010-05-25 50 views
20

有没有什么办法可以修复我的存储库,并提供具体的提交历史记录。Git日志:致命对象[sha1]已损坏

# git log 
fatal: object 01aeb2bf2e93b238f0e0422816b3e55518321ae7 is corrupted 

从阅读下面的链接,它看起来像我会打掉它,并重新开始。

http://www.miek.nl/s/7e76eadefe/

+1

我应该补充说明,这是因为我的虚拟机上的磁盘损坏,它没有正确关闭。 – Keyo 2011-04-26 21:12:35

回答

11

你有这个仓库其他地方的克隆?假设损坏的对象是blob(文件内容),您可能需要阅读Linus Torvalds的this post以恢复损坏的对象。

+0

没有克隆。我昨天就设置好了。所以我只有10次提交。 我最终开始新鲜。但在每天结束的时候,它肯定会推到别的地方。学过的知识。 很高兴脱离svn。 Git速度很快! – Keyo 2010-05-26 00:36:42

+5

将在您的答案包括帖子的要点,只是incase,说,kernal.org有被黑客攻击,并且是脱机:( – SpoonMeiser 2011-09-12 09:08:38

8

我在相同的情况下结束了,可能是由于我正在工作的虚拟机的不正常关闭造成的.git/objects中大约有10个对象长度为零。据我所知,实际的源代码文件很好,只是存储库已被清理。

$ git status 
fatal: object fbcf234634ee04f8406cfd250ce5ab8012f92b08 is corrupted 

每一些建议,我看到其他地方(包括Linus的岗位上面提到的),我尝试暂时将损坏的对象混帐从git的/对象抱怨别处。当移动了所有的人,我有:

$ git status 
fatal: bad object HEAD 

大约一个小时的谷歌搜索后,并尝试不同的解决方案,我放弃了,用“混帐克隆”,以从源头上拉开始了新的工作拷贝(这是比我的工作副本晚了大约2个小时)。然后,我使用rsync -rC(-C排除了SCM文件)将修改后的文件从乱七八糟的工作副本复制到我的新工作副本。

+0

谢谢!似乎为我工作。灾难避免。 – DevX 2011-06-18 02:32:06

+0

同样的事情在这里VM腐败。 rsync工作完美 - 没有任何损失,只是容易重新创建的日志。谢谢! – 2012-08-22 10:23:46

1

您也可以尝试通过仅从其他信息库复制他们恢复这些对象。

我的虚拟机在录制推送提交时崩溃,因此这些对象已安全地存储在本地计算机上。我scp'ed他们虚拟机和瞧 - git fsck输出没有错误。

1

简单地删除Git是抱怨损坏的对象。我能够通过这种方式解决同样的问题。

fatal: object 985a4870e7d890b314d2794377045a8b007c7925 is corrupted 

对于上面的错误,我能找到相应的对象:

project_directory/.git/objects/98/5a4870e7d890b314d2794377045a8b007c7925 

在那里你可以看到该文件为0字节,删除它允许取开始工作。

推测上一次读取被中断,留下大小为0字节的损坏对象。

+0

奇怪,这实际上起作用,有点像踢电视清理静态! – 2012-11-20 19:28:42

+1

没有为我工作,它听起来像一个坏考虑Torvalds关于如何修复腐败对象的若干页指令的想法(在答案中已列出) – 2012-12-21 01:32:49

+0

对我来说也没有效果我的对象无处可寻 – 2016-03-29 16:37:45

1

有同样的问题,无论哪个混帐命令我跑了,它结束了与消息:

fatal: object <hash> is corrupted 

我没有备份,不想失去我的提交,所以我决定尝试Jase的溶液中取出的0长度的文件我有:.git/objects/00/<hash> 然后得到了相同的:

$ git status 
fatal: bad object HEAD 

然后,我试过才知道什么是错的,看着.git/refs/heads/master在那里我有哈希值。

我看着.git/logs/refs/head/master,发现像这样的线:

<old commit> <new commit> <author> <timestamp> commit: <commit message> 

我删除最后一行(其中有=)和粘贴这条线的成.git/refs/heads/master,擦除其内容

当时我能够成功提交。

1

我有这个相同的问题。我注意到我没有以root身份登录。当我以root身份登录时,我能够检查没有错误标志的日志。

为了巩固这一良好的状态,我这样做:

git add . 
git commit -a -m "stabilize git" 

我退出了根,并试图从客户端拉动。之后它为我解决了问题。

当我做了添加和提交时,我知道我对目录中的内容很好。通过“git status”我看不到任何更改。