Git возвращает «не удалось запустить repack» и «надувать возвращенные» ошибки - PullRequest
0 голосов
/ 20 сентября 2018

У меня проблема с репозиторием Git, хранящимся в GitLab.Кажется, это проблема с репозиторием, затрагивающая только этот конкретный репозиторий, так как все другие проекты, размещенные на GitLab, работают нормально.

Кажется, я могу лично выдвигать, извлекать и извлекать ветви, используя GitKraken, но когда я пытаюсьвытащить из Git Bash я получаю следующее:

$ git pull
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
error: Could not read bb5a805503a3da247038200df7002f452a8781e9
fatal: bad tree object bb5a805503a3da247038200df7002f452a8781e9
error: failed to run repack

У всех людей, сотрудничающих со мной в этом же проекте, возникают похожие проблемы при попытке вытащить:

$ git pull
remote: Enumerating objects: 112, done.
remote: Counting objects: 100% (112/112), done.
remote: Compressing objects: 100% (102/102), done.
fatal: pack has bad object at offset 8105548: inflate returned -5
fatal: index-pack failed

И это то, что мы всеполучить при попытке клонировать хранилище в новом месте:

remote: Enumerating objects: 4364, done.
remote: Counting objects: 100% (4364/4364), done.
remote: Compressing objects: 100% (1622/1622), done.
fatal: pack has bad object at offset 56589977: inflate returned -5
fatal: index-pack failed

Вот что мы попробовали:

  • Проверено несколько компьютеров
  • Проверено несколько пользователей

Я подозреваю, читая подобные вопросы, такие как этот , что наш репозиторий сломан.Однако я не понимаю, почему я могу работать с ним через GitKraken.С его графическим интерфейсом я успешно объединил две ветви и отправил последние коммиты на сервер.

У кого-нибудь есть объяснение, в чем может быть проблема?

Редактировать: попытка исправить хранилище

Следуя этим инструкциям содержится в ссылке, которую я разместил, а также в ответе ниже я запустил команду git fsck --full, чтобы проверить состояние ссылок репозитория.То, что я нашел, не обнадеживает, так как кажется, что многие ссылки не работают.

Checking object directories: 100% (256/256), done.
Checking objects: 100% (3769/3769), done.
broken link from  commit f42ccacb8101ef49493aca18089378697490bb66
              to    tree e461e3cbe3221cd5ba7035222aa716dcabb63713
broken link from  commit 2fe8ac2b06d8e8f37b354c395f60a77f0ab1f9a9
              to    tree 93b9618cc159c1b18aba319e8f7e3e5e8f7b57df
broken link from  commit 16d23305969b3a40316618b952b2e5ff1ffedbf6
              to    tree 80c4012d9f3b3f51f17932dec80e740bc4e5a1d6
broken link from    tree 867941d734b41a5ce800dff6ea7dbfca30787e15
              to    tree bb5a805503a3da247038200df7002f452a8781e9
broken link from    tree e16211709ea4ce02a89bbe87d30a410dac65e372
              to    blob b6eb83a9e4f16fe49a0eb9bfea0bf6dfce9adcbc
broken link from    tree e16211709ea4ce02a89bbe87d30a410dac65e372
              to    blob a593c8f43faacf41bc93c98dbb347e673cd47f3f
broken link from    tree e16211709ea4ce02a89bbe87d30a410dac65e372
              to    blob 652245900beb49246e58f5c216dbcf161f727e2d
broken link from    tree e16211709ea4ce02a89bbe87d30a410dac65e372
              to    blob a7998441f7435126feb6b35e9b4b575bd193d6d2

, за которым следует длинный список строк dangling commit и dangling blob с 8 экземплярами missing:

[...]
missing tree 80c4012d9f3b3f51f17932dec80e740bc4e5a1d6
[...]
missing blob a593c8f43faacf41bc93c98dbb347e673cd47f3f
[...]
[6 more]

Похоже, что восстановление поврежденных файлов вручную заняло бы довольно много времени.

Редактирование # 2: локально исправлено хранилище

Я установил и запустил git-repair в своей локальной копии хранилища и фактически исправил ее.Если я сейчас запускаю git fsck --full, я вижу только «здоровые» сообщения в ответ.Нет больше неработающих ссылок.

Однако, неважно, если я git push --force до origin, кажется, origin остается неработающим.Одно странное обновление в том, что теперь я могу успешно использовать git clone, тогда как все мои коллеги все еще не могут.Как это может быть?

И самое главное, есть ли способ, которым я действительно могу запустить git-repair на origin?

Редактировать # 3: Сделано новое происхождение

После локального исправления моего репозитория (и проверки того, что git fsck не дает недостающих ссылок), я переместил все соответствующие ветки в GitLab.Я думал, что так и будет, но, к сожалению, проблема сохраняется.

Паттерн, который я начинаю замечать, заключается в том, что мы все, похоже, можем clone из Ubuntu (используя Git Bash или GitKraken), но не в Windows 10 (ни используя Git Bash, ни GitKraken).

Читая по всему сайту, я нашел вопрос о том, как возможно, что Git работает на Linux, но не на Windows.Там они объяснили, что это была проблема, связанная с Git (но это было более 1 года назад).Имеет ли смысл что-то подобное произошло?Я должен сказать, что я скептически отношусь к этому, потому что другие репозитории, с которыми мы тестировали, отлично работают на Windows.

Редактирование # 4: протестировано с более старыми версиями Git для Windows

Текущая версия 2.19.Я пробовал это на 2.18 и 2.9 (последний датируется 2016 годом), но я получаю ту же ошибку.

Редактирование # 5: попытался клонировать локально успешно

После предложения о проблема GitHub Я написал на git-for-windows, я пытался использовать git clone из копии репозитория на USB-накопителе.Это сработало.Проблема, похоже, ограничена Git + Windows + GitLab или Git + Windows + SSH.

1 Ответ

0 голосов
/ 20 сентября 2018

Как указывает связанный ответ, большинство объектов в дереве рассеиваются и сжимаются для сохранения пропускной способности и диска, создавая упомянутые файлы .pack.

В процессе извлечения клиент git обмениваетсяс удаленным - список ссылок и заголовков, так что удаленный может их обойти и вычислить, какие объекты необходимо отправить, основываясь на том, что у клиента уже есть.Затем он создает пакеты и отправляет их клиенту.Это означает, что пакет, отправленный клиенту, может отличаться от другого для того же объекта.

Что касается причины, я не могу сказать, но это правдоподобно , что ваше хранилище пропускаетконфликтующий объект, хотя, поскольку разные клиенты выдают эту ошибку в одной и той же рабочей копии, это маловероятно и выглядит так, как будто это может быть просто программная проблема, возможно, различия в zlib, используемом каждым клиентом.

Вы можете попробовать force-push ваш репозиторий (не рекомендуется) или отправка на другой пульт в качестве крайней меры.

Кроме того, из ссылки на ваш ответ есть процедура, которую можно попробовать и исправить поврежденные репозитории .

ОБНОВЛЕНИЕ: В качестве продолжения -5 означает Z_BUF_ERROR на zlib и согласно документации :

inflate () возвращаетZ_OK, если был достигнут некоторый прогресс [...] Z_BUF_ERROR, если прогресс невозможен или если в буфере вывода недостаточно места при использовании Z_FINISH.Обратите внимание, что Z_BUF_ERROR не является фатальным, и inflate () может быть вызван снова с большим входным и большим выходным пространством для продолжения распаковки.Если возвращается Z_DATA_ERROR [...]

Я лично думаю, что ошибка в программном обеспечении, а не в GitLab, но это предположение с моей стороны.

И предложение:Если невозможно перенести всех разработчиков в Linux ... А как насчет подсистемы Linux для W10?

...