git log で「data stream error (incorrect header check)」とか「fatal: loose object XXXX (stored in .git/objects/xx/XXXX) is corrupt」が出る件
事象
とあるローカルリポジトリにて、先週くらいから git log するとエラーが出るようになった。まず Tortoise Git の Show log でエラーが出て、なんでだろと git コマンドで git --no-pager log
をして全件表示してみると、ずいぶんと過去のコミットのところで以下が出る。
$ git --no-pager log ... ... error: inflate: data stream error (incorrect header check) error: unable to unpack XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX header fatal: loose object XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (stored in .git/objects/xx/YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY) is corrupt
なぜかは知らんが Git オブジェクトが壊れてるみたいだ。
解決方法
以前バックアップしてたローカルリポジトリの .git/objects/xx/YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY で上書きした。
上書きする前、WinMerge で .git/objects/xx/ の差分を取ってみたら、見事に YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY のみに差分が出ている状態だったので、試しに上書きしてみたらエラーが出なくなった……という具合。
試したけどダメだったこと
- git fsck
- git gc
- git/objects/xx/YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY を削除してから git log
- git/objects/xx/YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY を削除してから git fsck
上記は全部ダメだった。
で、壊れた原因は?
不明。
申し訳ないが Git オブジェクトを勉強するほど物好きではないです。……といいつつ、勉強して中身読んだりすると楽しいかもしれないなと思ったり。気が向いたら。