1. ホーム
  2. git

[解決済み] Git "破損したルースオブジェクト"

2022-02-19 02:58:11

質問

リモートからプルするたびに、圧縮に関する以下のエラーが表示されます。手動圧縮を実行しても、同じようになります。

$ 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

どなたか解読していただけませんか?

解決方法は?

私も同じ問題がありました(原因は不明)。

この修正には、リポジトリの破損していないリモートコピーへのアクセスが必要であり、ローカルで作業しているコピーはそのまま維持されます。

しかし、欠点もあります。

  • プッシュされなかったコミットの記録を失い、それらを再コミットしなければならなくなります。
  • 隠し場所を失います。

修正

レポの親ディレクトリから以下のコマンドを実行します('foo'はプロジェクトフォルダの名前に置き換えてください)。

  1. 破損したディレクトリのバックアップを作成します。
    cp -R foo foo-backup
  2. リモートリポジトリの新しいクローンを新しいディレクトリに作成します。
    git clone [email protected]:foo foo-newclone
  3. 破損した.gitサブディレクトリを削除します。
    rm -rf foo/.git
  4. 新しくクローンした.gitサブディレクトリをfooに移動します。
    mv foo-newclone/.git foo
  5. 一時的な新しいクローンの残りを削除します。
    rm -rf foo-newclone

Windowsの場合、使用する必要があります。

  • copy ではなく cp -R
  • rmdir /S ではなく rm -rf
  • move ではなく mv

これで foo は元の .git サブディレクトリを取り戻しましたが、ローカルでの変更はすべてそのまま残っています。 git status , commit , pull , push などが再び正常に動作するようになりました。