$ git pull
remote: fatal: object 21f3981dd35fccd28febabd96f27241eea856c50 is corrupted
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header
これが失敗する理由はありますか?
実行時git --bare fsck-objects --full
ぶら下がりリンクだけが表示されますが、壊れたリンクは表示されません。また、git gc
は何の助けにもなりませんでした。再クローンしたり、別のクローンからプルしたりしても、このエラーは表示されません。
ジュリアンが言ったように https://confluence.atlassian.com/display/FISHKB/Git+indexing+fails+due+to+bad+pack+header
これは本当にメモリの問題になる可能性があります。ここで解決策を失わないようにするには、次のようにします。
git config --global pack.windowMemory "100m"
git config --global pack.SizeLimit "100m"
git config --global pack.threads "1"
git config --global pack.window "0"
を追加するとうまくいきました...
git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"
理由:
Gitクローンは、リポジトリのクローンを作成中にデータを圧縮します
データ/ファイルを受信する前に、サーバーメモリ上のデータを圧縮します。
サーバーのメモリが不足している場合、オブジェクトのパック中に上記のエラーが発生します
次のコマンドを使用して、サーバー上のオブジェクトをパックせずに、Gitにリポジトリのクローンを作成させることにより、問題を修正できます。
git config --global pack.window "0"
答えはコメントにあるようです:git fsck
このエラーが発生し、投稿に記載されているすべてのことをfsck、repack、gc、メモリオプションの構成に半日費やしました。
この投稿にも続きました: http://git.kernel.org/cgit/git/git.git/tree/Documentation/howto/recover-corrupted-blob-object.txt?id=HEAD
しかし、最終的には、むき出しのリポジトリで破損したオブジェクト(この場合は21f3981dd35fccd28febabd96f27241eea856c50)を見つけ、それを破損していないバージョン(ローカルリポジトリのいずれかの.gitフォルダにあります) /裸のリポジトリからクローンされました。)
クライアントでは、次のようにしてください:
git config --global pack.windowMemory "100m"
git config --global pack.SizeLimit "100m"
git config --global pack.threads "1"
git config --global pack.window "0"
またはgitサーバーで、これを試してください:modify:/home/git/repositories/***.git/config
、以下を追加:
[pack]
window = 0
これは私のために問題を解決し、他の人に役立つことを願っています。 :) https://confluence.atlassian.com/display/FISHKB/Git+indexing+fails+due+to+bad+pack+header
私にとってこれは、gitリポジトリをホストしている私のリモートサーバーに破損したオブジェクト/ファイルがあったためです。再パックしようとすると、メモリが不足していました。インスタンスのメモリをアップグレードしてからsshを実行して実行しました
git gc
ドキュメントへのリンクは次のとおりです。