22

このエラーを受け取る直前に、次のことを行いました。

user@thismachine:~/file/path$ git add *
user@thismachine:~/file/path$ git push 
^C
user@thismachine:~/file/path$ git commit -m "my commitmesg"

(プッシュする前にコミットを追加するのを忘れてパニックになったので、cntrl + cしました。

から次のエラーが表示されgit fsck --fullます。

error: inflate: data stream error (incorrect header check)
error: corrupt loose object '5cdeb9c3a1fe164cb4d2779d1e0d9d9f4ef18c6a'
fatal: loose object 5cdeb9c3a1fe164cb4d2779d1e0d9d9f4ef18c6a (stored in .git/objects/5c/deb9c3a1fe164cb4d2779d1e0d9d9f4ef18c6a)

git cat-file -t 5cdeb9c3a1fe164cb4d2779d1e0d9d9f4ef18c6a は、このオブジェクトがコミットであることを返します。

検索した結果、オブジェクトがブロブの場合は修正する方法を見つけましたが、コミットの場合は修正しませんでした。

4

6 に答える 6

34

http://vincesalvino.blogspot.ca/2013/08/git-empty-files-corrupt-objects-and.htmlの解決策により、問題を解決できました。

find .git/objects/ -size 0 -exec rm -f {} \;
于 2015-08-25T01:04:34.530 に答える
20

まず、既存のリポジトリのバックアップを作成します。 cp -rか何か。そうすれば、リポジトリを修復しようとして失敗した場合でも、復元できます。

最も簡単な方法は、その破損したオブジェクト ファイルを有効なものに置き換えることです。リポジトリのバックアップがある場合は、それを使用してください。それ以外の場合は、git cloneリモート リポジトリから新しいコピーを取得.git/objects/5c/deb9c3a1fe164cb4d2779d1e0d9d9f4ef18c6aし、既存の壊れたリポジトリにコピーします。それが修正されるかどうかを確認してください。

于 2012-09-24T19:37:30.973 に答える
8

返信ありがとうございます。私はそれを新しい複製されたレポで実行し、オブジェクトの 100% をアンパックしたことを返しましたが、それらはそのレポの .git/objects/pack にはありませんでした。

それで、代わりに、今朝うまくいったことを試してみました。1. github リポジトリを別の新しいディレクトリに複製します。2.ローカルで変更されたファイル(最初にコミットしたかった)を新しいクローンリポジトリにコピーしてから、それらをgithubにプッシュしました。3.古いローカルリポジトリをnukedし、4.古いリポジトリと同じファイルパスに再度クローンしました。

于 2012-09-25T13:21:36.310 に答える
5

Schwerm の回答と非常に似ていますが、.packファイルを展開する新しいレポを初期化する必要がありました。

git clone <repo-uri> my_repo.fresh_clone
mkdir my_repo.newly_unpacked
cd !$
git init
for pack_file in ../my_repo.fresh_clone/.git/pack/*.pack; do
    git unpack-objects < $pack_file
done

my_repo.newly_unpacked/.git/objects/<xx>/<sha1>次に、エラー メッセージで示されているように、からファイルをコピーしました。git checkout単純な よりも多くの欠落オブジェクトが明らかになったなど、いくつかの操作が原因で私は捕まったのでgit status、復元ディレクトリをクリーンアップする前に少しの間保持することをお勧めします。

于 2015-06-16T22:15:19.257 に答える
0

この問題に直面している人のためのこの質問に対する簡単な答え: git cloneコマンドが修正です。リモート リポジトリがある場合は、(破損したローカル リポジトリを削除した後) ローカル フォルダーにクローンします。リモート リポジトリがない場合は、破損したレポを github にプッシュし、そこから複製します。破損したオブジェクトはプッシュされず、問題が修正されると思います

于 2014-08-14T08:29:21.610 に答える