web-dev-qa-db-ja.com

Git使用時の「エラー:不正なインデックス - 致命的:インデックスファイルが破損している」の解決方法

git initの後、私はいくつかのファイルを追加してコミットし、いくつかの変更を加え、追加してコミットしました。 gitデーモンをセットアップし(WinXPのCygwinの下で実行されている)、リポジトリーを1回複製しました。さて、クローンリポジトリでこのエラーが出ます:

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

リポジトリの新しいコピーを入手する以外に、これを修正する方法はありますか?

536
Number8

問題がとしてコミットするためのステージングエリア(つまり.git/index)である場合は、単にインデックスを削除し(必要に応じてバックアップコピーを作成)、その後インデックスをversion inに復元できます。最後のコミット:

OSX/Linuxの場合

rm -f .git/index
git reset

Windowsの場合

del .git\index
git reset

(上記のresetコマンドはgit reset --mixed HEADと同じです)

git read-treeの代わりに低レベルの plumbinggit resetを使用することもできます。


問題がindex for packfileにある場合は、git index-packを使用して回復できます。

1110
Jakub Narębski

プロジェクトルートのsedで.git/indexファイルを誤って破損させた可能性があります(おそらくリファクタリング?):

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")
75
hobs

これは悪いクローンのようです。あなたは(おそらく?)より多くの情報を得るために以下を試すことができます:

git fsck --full
13
Gav

私はその問題を抱えていました、そして私はこれでti fixを試みます:

rm -f .git/index
git reset

しかしそれはうまくいきませんでした。 解決策?どういうわけか私は他の.gitフォルダをサブディレクトリに持っていました。これらの.gitフォルダ(プリンシパルではありません)とgit resetをもう一度削除します。それらが削除されると、すべてが再び機能しました。

11
Cleiton Almeida

上記の解決策では問題が解決しないため、この退屈な解決策を使用しました。

  1. レポの新しいコピーを他の場所に複製する
  2. コミットしたい変更を含んだ(壊れた)リポジトリに新しい.gitディレクトリをコピーします。

トリックをしました。ところで、私は@hobsが推測したようにプロジェクトルートでsedをしました。私の授業を学びました。

6
eskimwier

これは私のために働きました。私は最初にエラーを取得し始めた理由に興味がありますが。昨日ログアウトしたときは大丈夫でした。今朝ログインしてください、そうではありませんでした。

rm .git/index

git reset
6
Eighty

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

4
jenming

この問題は、いずれかのサブディレクトリの下に.gitディレクトリがある場合に発生する可能性があります。解決するには、他に.gitディレクトリがあるかどうかを確認し、それらを削除してからやり直してください。

3
Nick Kuijpers

私は同じ問題に直面していました。git/ indexでインデックスファイルの名前を変更してから、git reset workを実行してください。

0
Omar Hayat