2010-05-25 48 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」我看不到任何更改。