2009-07-12 97 views
442

git init之後,我添加並提交了一些文件,進行了一些更改,添加並提交。設置git守護進程(在WinXP上的Cygwin下運行)並克隆一次倉庫。 現在,我得到這個錯誤與克隆庫:如何在使用Git時解決「錯誤:錯誤索引 - 致命:索引文件損壞」

$ git status 
error: bad index file sha1 signature 
fatal: index file corrupt 

有什麼辦法來解決這個問題,比得到一個版本庫的新副本等?

+0

是這在克隆的存儲庫中,還是在原始存儲庫中?克隆命令是否輸出任何錯誤? – 2009-07-12 11:27:04

回答

884

如果問題是與指數臨時區域提交(即.git/index),你可以簡單地刪除索引(作備份副本,如果你想),然後恢復索引版本的最後一次提交:

在OSX/Linux的:

rm -f .git/index 
git reset 

在Windows上:

del .git\index 
git reset 

(以上reset命令相同git reset --mixed HEAD

,您也可以使用較低水平plumbinggit read-tree代替git reset


如果問題是指數packfile,則可以使用git index-pack恢復。

+25

我不小心在`:Gstatus`中做了一個`:w!`(來自fugitive.vim)。這個答案爲我挽救了很多頭髮。 – 2012-02-29 17:46:22

+3

我知道我們不喜歡「我也是」消息 - 但是「我也是」。在Windows中相當於`erase/s .git \ index`,我也需要'erase .git \ index.lock`。 – 2012-06-15 07:23:53

+0

我不得不使用rm .git/index,因爲我收到一個模棱兩可的警告使用-f – 2012-07-16 21:43:10

12

這聽起來像一個不好的克隆。你可以嘗試以下,以獲得更多的信息(可能):

git fsck --full 
68

您可能不小心損壞了的sed你的項目的根(重構吧?)有類似的git的/索引文件:

sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr "$SEARCHPATERN" "$PROJECTROOT") 

避免這種情況在未來,恰恰忽略的二進制文件你的grep/sed的:

sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr --binary-files=without-match "$SEARCHPATERN" "$PROJECTROOT") 
-6

您也可以嘗試恢復以前版本的文件(如果你使用Windows操作系統)

6

我有這樣的問題,我嘗試TI與修復這個:

rm -f .git/index 
git reset 

但它沒有工作。 解決方案? 出於某種原因,我在其他子目錄中有.git文件夾。我再次刪除這些.git文件夾(不是主體)和git reset。一旦他們被刪除,一切都再次運作。

9

在我的情況下,它被嵌套在網頁/ CKEditor的git的文件夾/時,有一個.git目錄一個子目錄下kcfinder

git status 
    error: bad index file sha1 signature 
    fatal: index file corrupt 
    fatal: 'git status --porcelain' failed in submodule web/ckeditor/kcfinder 
3

可能出現此問題。要修復它,請檢查是否有其他.git目錄,然後將其刪除並重試。

2

這對我有效。雖然我很好奇我開始在第一個地方得到錯誤的原因。當我昨天退出時,情況良好。今天早上登錄,事實並非如此。

rm .git/index 

git reset 
2

由於上述解決方案,給我留下了持續的問題,我用這個沉悶的解決方案:

  1. 克隆其他地方回購
  2. 的新副本複製到新的.git目錄到(破)回購,包含我想要承諾的變化

有沒有訣竅。順便說一句,我做了一個sed作爲@hobs猜測項目的根。學到了我的教訓。

-1

這很荒謬,但我只是重新啓動了我的機器(mac),問題沒有發生,就像從未發生過。我恨聽起來像一個支持的傢伙......

0

注意的git的子模塊的用戶 - 這裏的解決方案將不會爲你工作原樣。

比方說,你有一個名爲dev父庫,例如,你的子模塊庫稱爲api

如果你是api內,你在這個問題提到的錯誤:

error: bad index file sha1 signature fatal: index file corrupt

index文件將不會是一個.git文件夾內。實際上,.git甚至不會是一個文件夾 - 它將成爲一個文本文檔,其中包含該存儲庫的真正.git數據的位置。可能是這樣的:

~/dev/api $ cat .git gitdir: ../.git/modules/api

所以,相反的rm -f .git/index,你需要這樣做:

rm -f ../.git/modules/api/index git reset

,或者更一般地說,

rm -f ../.git/modules/INSERT_YOUR_REPO_NAME_HERE/index git reset