Git: 「破損したルーズオブジェクト」質問する

Git: 「破損したルーズオブジェクト」質問する

リモートからプルするたびに、圧縮に関する次のエラーが表示されます。 手動圧縮を実行すると、同じエラーが表示されます。

$ 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」をプロジェクト フォルダーの名前に置き換えます)。

  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、、、などが再び正常に動作するようになりましたcommitpullpush

おすすめ記事