Ошибка извлечения GIT - удаленный объект поврежден - PullRequest
45 голосов
/ 13 ноября 2010
$ 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 никак не помогло.Когда я откидываюсь или вытягиваюсь из другого клона, я не вижу этой ошибки.

Ответы [ 7 ]

28 голосов
/ 30 ноября 2013

Как сказал Джулиан, см. 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"
15 голосов
/ 01 февраля 2015

Добавление 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 clone репозиторием без упаковки объектов на сервере следующим образом.

git config --global pack.window "0"

12 голосов
/ 08 мая 2012

Похоже, ответ в комментариях: git fsck

5 голосов
/ 09 января 2014

Только что получил эту ошибку и провел полдня, выполняя все действия, описанные в посте: fsck, repack, gc, настройку параметров памяти.

Также следил за этим постом: http://git.kernel.org/cgit/git/git.git/tree/Documentation/howto/recover-corrupted-blob-object.txt?id=HEAD

Но, в конце концов, это было так же просто, как найти поврежденный объект (в данном случае 21f3981dd35fccd28febabd96f27241eea856c50) в пустом хранилище и заменить его на не поврежденную версию (которую можно найти в папке .git любого излокальные репозитории, которые извлекли / клонировали из голого репозитория.)

2 голосов
/ 19 июня 2017

в клиенте, попробуйте сделать это так:

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 server, попробуйте это: изменить: /home/git/repositories/***.git/config , добавить ниже:

[pack]
         window = 0 
1 голос
/ 20 ноября 2013

Это решает проблему для меня, и надежда помогает кому-то еще. :) https://confluence.atlassian.com/display/FISHKB/Git+indexing+fails+due+to+bad+pack+header

0 голосов
/ 12 ноября 2016

Для меня это было потому, что мой удаленный сервер, на котором размещалось git-репо, имел поврежденный объект / файл. Когда я попробовал переупаковать, памяти не хватало. Я обновил память своего экземпляра, а затем снова поднял ssh-ed и запустил

git gc

Вот ссылка на документацию:

https://git -scm.com / книга / UZ / v2 / GIT-Internals-Packfiles

...