リモートからプルするたびに、圧縮に関する次のエラーが表示されます。 手動圧縮を実行すると、同じエラーが表示されます。
$ git gc
error: Could not read 3813783126d41a3200b35b6681357c213352ab31
fatal: bad tree object 3813783126d41a3200b35b6681357c213352ab31
error: failed to run repack
それについてどうしたらいいか知っている人はいますか?
cat-file から次の内容を取得します:
$ git cat-file -t 3813783126d41a3200b35b6681357c213352ab31
error: unable to find 3813783126d41a3200b35b6681357c213352ab31
fatal: git cat-file 3813783126d41a3200b35b6681357c213352ab31: bad file
そして、git fsck から次の結果を得ました (実際に関連しているかどうかはわかりません)。
$ git fsck
error: inflate: data stream error (invalid distance too far back)
error: corrupt loose object '45ba4ceb93bc812ef20a6630bb27e9e0b33a012a'
fatal: loose object 45ba4ceb93bc812ef20a6630bb27e9e0b33a012a (stored in .git/objects/45/ba4ceb93bc812ef20a6630bb27e9e0b33a012a) is corrupted
誰かこれを解読するのを手伝ってくれませんか?
ベストアンサー1
私も同じ問題を抱えていました(理由はわかりません)。
この修正には、リポジトリの破損していないリモート コピーへのアクセスが必要であり、ローカルの作業コピーはそのまま維持されます。
しかし、いくつか欠点もあります。
- プッシュされなかったコミットの記録は失われ、再度コミットする必要があります。
- 保管していたものはすべて失われます。
修正方法
リポジトリの上の親ディレクトリから次のコマンドを実行します (「foo」をプロジェクト フォルダーの名前に置き換えます)。
- 破損したディレクトリのバックアップを作成します。
cp -R foo foo-backup
- リモート リポジトリの新しいクローンを新しいディレクトリに作成します。
git clone [email protected]:foo foo-newclone
- 破損した .git サブディレクトリを削除します。
rm -rf foo/.git
- 新しくクローンされた .git サブディレクトリを foo に移動します。
mv foo-newclone/.git foo
- 一時的な新しいクローンの残りを削除します。
rm -rf foo-newclone
Windows では以下を使用する必要があります:
copy
の代わりにcp -R
rmdir /S
の代わりにrm -rf
move
の代わりにmv
これで、foo の元の.git
サブディレクトリが戻りましたが、ローカルの変更はすべてそのまま残っています。git status
、、、などが再び正常に動作するようになりましたcommit
。pull
push