git fsck сообщает о несоответствии sha1 - PullRequest
4 голосов
/ 26 августа 2010

При выполнении команды git fsck --full --strict возникла следующая проблема:

error: sha1 mismatch ced885d12a0677f2db9025e1e684c72e67283fcd

error: ced885d12a0677f2db9025e1e684c72e67283fcd: object corrupt or missing
error: sha1 mismatch cf5a1546bd2de5611eaf6136fb5ca02b4e358bec

error: cf5a1546bd2de5611eaf6136fb5ca02b4e358bec: object corrupt or missing
error: sha1 mismatch cf5d9d5723014921370de479c54a73230c86a981

error: cf5d9d5723014921370de479c54a73230c86a981: object corrupt or missing
error: sha1 mismatch cf675ce5bc5eeb5937441c6a02976cf2fa40076b

error: cf675ce5bc5eeb5937441c6a02976cf2fa40076b: object corrupt or missing
error: sha1 mismatch cf7c5156cf127eb7141505946df51b2b57925a50

error: cf7c5156cf127eb7141505946df51b2b57925a50: object corrupt or missing
dangling commit 3468455f0d9d055bbe957744aa10e670469d3912
dangling commit daeec54632203157a70bae93b9d7c3290820c2f9
(more dangling commit messages)

(Примечание: меня не волнуют сообщения о фиксации. Я сосредоточен на проблеме несоответствия sha1.)

Моя интерпретация этого сообщения заключается в том, что git-fsck повторно вычисляет sha1 из полезной нагрузки, но обнаружил, что sha1 отличается от того, который использовался для обозначения объекта. Объекты не отсутствуют в хранилище (я проверяю w / git cat-file).

Странная вещь в том, что, если я снова запускаю команду, у меня все еще есть сообщения sha1, но для разных объектов:

error: sha1 mismatch 1452752024456a509540591c4879b3e3534f457e

error: 1452752024456a509540591c4879b3e3534f457e: object corrupt or missing
error: sha1 mismatch 16e08310d7182e97092d2783c911dbcf66538238

error: 16e08310d7182e97092d2783c911dbcf66538238: object corrupt or missing
dangling commit 3468455f0d9d055bbe957744aa10e670469d3912

Примечание: хранилище не изменилось между двумя запусками.

Мы работаем под Linux, и текущая версия git:

$git --version
git version 1.7.2.2.170.g5c7f2

Ошибки были в предыдущей версии (1.6.5.rc2.18.g6d8b). Эти git были собраны из исходников с использованием gcc 3.4.4.

ОДНАКО, когда я копирую репозиторий на другой хост, git fsck вообще не сообщает о проблемах. Версия git 1.7.2.1 (предоставлена ​​Fedora).

Я сделал следующие наблюдения:

  1. Объекты, имеющие недопустимый sha1, часто находятся в одном диапазоне (в первом примере sha1 начинаются с ce или cf), и ошибки запускаются в течение небольшого периода во время выполнения fsck. Я считаю, что git-fsck выполняет упорядоченное сканирование (или, возможно, объекты сортируются в пакете).
  2. Эти объекты - относительно большие капли (> 900 КБ)
  3. Мы выполнили 15-минутный полный проход memtest для возможного сбоя аппаратной памяти. Мы не нашли никаких проблем. На этом сервере не наблюдается другого странного поведения, которое также выполняет множество других не-git задач.
  4. git gc не жалуется

Гипотезы пока:

  1. Эта проблема вызвана неправильной сборкой git (версия библиотеки? Compiler?)
  2. Нашему тесту не удалось обнаружить реальную проблему с памятью.
  3. Существует небольшая ошибка в вычислении шага git-fsck, которая возникает случайным образом (или, точнее, в определенных коротких временных окнах) для больших BLOB-объектов.

Как мы можем решить это?

1 Ответ

2 голосов
/ 27 февраля 2011

Должно быть, это какая-то аппаратная проблема.

...