git init
の後、私はいくつかのファイルを追加してコミットし、いくつかの変更を加え、追加してコミットしました。 gitデーモンをセットアップし(WinXPのCygwinの下で実行されている)、リポジトリーを1回複製しました。さて、クローンリポジトリでこのエラーが出ます:
$ git status
error: bad index file sha1 signature
fatal: index file corrupt
リポジトリの新しいコピーを入手する以外に、これを修正する方法はありますか?
問題がとしてコミットするためのステージングエリア(つまり.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
を使用して回復できます。
プロジェクトルートの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")
これは悪いクローンのようです。あなたは(おそらく?)より多くの情報を得るために以下を試すことができます:
git fsck --full
私はその問題を抱えていました、そして私はこれでti fixを試みます:
rm -f .git/index
git reset
しかしそれはうまくいきませんでした。 解決策?どういうわけか私は他の.gitフォルダをサブディレクトリに持っていました。これらの.gitフォルダ(プリンシパルではありません)とgit reset
をもう一度削除します。それらが削除されると、すべてが再び機能しました。
上記の解決策では問題が解決しないため、この退屈な解決策を使用しました。
トリックをしました。ところで、私は@hobsが推測したようにプロジェクトルートでsed
をしました。私の授業を学びました。
これは私のために働きました。私は最初にエラーを取得し始めた理由に興味がありますが。昨日ログアウトしたときは大丈夫でした。今朝ログインしてください、そうではありませんでした。
rm .git/index
git reset
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
この問題は、いずれかのサブディレクトリの下に.git
ディレクトリがある場合に発生する可能性があります。解決するには、他に.gitディレクトリがあるかどうかを確認し、それらを削除してからやり直してください。
私は同じ問題に直面していました。git/ indexでインデックスファイルの名前を変更してから、git reset workを実行してください。