2010-08-26 71 views
4

我們有以下的問題,同時運行git fsck --full --strict命令:的git fsck的報告「SHA1不匹配」

error: sha1 mismatch ced885d12a0677f2db9025e1e684c72e67283fcd 

error: ced885d12a0677f2db9025e1e684c72e67283fcd: object corrupt or missing 
error: sha1 mismatch cf5a1546bd2de5611eaf6136fb5ca02b4e358bec 

error: cf5a1546bd2de5611eaf6136fb5ca02b4e358bec: object corrupt or missing 
error: sha1 mismatch cf5d9d5723014921370de479c54a73230c86a981 

error: cf5d9d5723014921370de479c54a73230c86a981: object corrupt or missing 
error: sha1 mismatch cf675ce5bc5eeb5937441c6a02976cf2fa40076b 

error: cf675ce5bc5eeb5937441c6a02976cf2fa40076b: object corrupt or missing 
error: sha1 mismatch cf7c5156cf127eb7141505946df51b2b57925a50 

error: cf7c5156cf127eb7141505946df51b2b57925a50: object corrupt or missing 
dangling commit 3468455f0d9d055bbe957744aa10e670469d3912 
dangling commit daeec54632203157a70bae93b9d7c3290820c2f9 
(more dangling commit messages) 

(注:我真的不關心晃來晃去提交信息我專注於SHA1不匹配的問題。 )

我對這條消息的解釋是,git-fsck從有效負載重新計算sha1,但發現sha1與用於指定對象的sha1不同。這些對象不會從存儲庫中丟失(我已經檢查過w/git cat-file)。

奇怪的是,如果我再次運行該命令,我仍然有SHA1消息,但對於不同的對象:

error: sha1 mismatch 1452752024456a509540591c4879b3e3534f457e 

error: 1452752024456a509540591c4879b3e3534f457e: object corrupt or missing 
error: sha1 mismatch 16e08310d7182e97092d2783c911dbcf66538238 

error: 16e08310d7182e97092d2783c911dbcf66538238: object corrupt or missing 
dangling commit 3468455f0d9d055bbe957744aa10e670469d3912 

注:該庫還沒有兩個運行之間變化。

我們正在運行Linux和當前的git的版本是:

$git --version 
git version 1.7.2.2.170.g5c7f2 

的錯誤在以前的版本(1.6.5.rc2.18.g6d8b)在那裏。這些git是使用gcc 3.4.4從源碼構建的。

但是,當我在另一主機上覆制存儲庫時,git fsck報告完全沒有問題。那裏的git版本是1.7.2.1(由Fedora提供)。

我已經提出了以下觀點:內的被觸發

  1. 具有無效SHA1往往是在相同的範圍內(在第一實施例中,sha1s有ce或CF開始)中的對象和所述的錯誤在fsck運行期間的一小段時間。我相信git-fsck會執行一個有序的掃描(或者對象是在包內進行排序的)。
  2. 這些對象是相對較大的blob(> 900k)
  3. 我們針對可能的硬件內存故障運行了15分鐘完整的memtest通行證。我們沒有發現任何問題。在此服務器上沒有發現其他奇怪的行爲,它們也執行許多其他非git任務。
  4. git gc不抱怨

假說至今:

  1. 此問題是由不正確的構建混蛋(?庫版本編譯)引起
  2. 我們MEMTEST未能找到一個真正的記憶問題。
  3. git-fsck sha1計算中存在一個微妙的錯誤,它針對大塊隨機出現(或者更確切地說在特定的短時間窗口內)。

我們該如何解決?

+2

鑑於您使用的是非穩定版本的git,您最好問的地方可能是FreeNode IRC上的Git列表或#git。我會在那裏檢查,因爲它可能是Git中的一個錯誤,但是對於開發版本,最好檢查一下。 – 2010-08-27 14:27:49

+0

我懷疑也是非穩定發展。但奇怪的是,兩個開發版本(1.6.5.rc2.18和1.7.2.2.170)都存在同樣的問題。我試圖在另一臺主機上構建一個開發版本,並且我沒有問題地運行fsck。下一步是在其他主機上運行可執行文件時複製可執行文件。沒問題。所以,它似乎與在雙Intel Pentium D @ 3GHz上運行Linux Centos 4.2的服務器本身有關。也許這是由於Centos上的一些老圖書館。有沒有Git的系統需求這樣的事情? – gawi 2010-08-28 01:18:47

+0

也許你正在從磁盤讀取隨機腐敗。這可能是由許多事情引起的,通常(但不總是)硬件。如果硬件,內存以外的東西可能會導致它。例如,嘗試使用'cp -ar'複製你的.git目錄,然後用'diff -r'複製原始文件。如果他們出現不同的情況,git就沒有問題了。 – 2010-09-03 23:49:48

回答

2

它一定是某種硬件問題。