У нас есть следующая проблема при выполнении команды 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, отличный от того, который использовался для обозначения объекта. Объекты в репозитории отсутствуют (проверил с помощью 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).
Я сделал следующие наблюдения:
- Объекты с недопустимым sha1 часто находятся в одном диапазоне (в первом примере sha1 начинаются с ce или cf), и ошибки возникают в течение небольшого периода времени во время выполнения fsck. Я считаю, что git-fsck выполняет упорядоченное сканирование (или, возможно, объекты сортируются внутри пакета).
- Эти объекты представляют собой относительно большие капли (> 900 тыс.)
- Мы выполнили 15-минутный полный проход memtest для возможного сбоя аппаратной памяти. Мы не нашли ни одной проблемы. На этом сервере не наблюдается никакого другого странного поведения, которое также выполняет множество других задач, не связанных с git.
git gc
не жалуется
Гипотезы на данный момент:
- Эта проблема вызвана неправильной сборкой git (версия библиотеки? компилятор?)
- Наш мемтест не смог найти реальную проблему с памятью.
- Существует небольшая ошибка в вычислении git-fsck sha1, которая возникает случайным образом (или, точнее, в течение определенных коротких временных окон) для больших BLOB-объектов.
Как мы можем решить эту проблему?
cp -ar
, а затемdiff -r
копию с оригиналом. Если они приходят разные, git сорвался с крючка. - person Wayne Conrad   schedule 04.09.2010