Как исправить предупреждение w20> с нулевым дополнением
Я считаю, что мой Git не в хорошей форме, когда я делаю
git fsck
Я получаю следующие предупреждения сверху.
103b5dd53f7a96f8e3a02aea0d3d4d9bb19644ed: contains zero-padded file modes
bb4729593e76f66b46292ad6ae61bfe909558337: contains zero-padded file modes
4709aa73691ce7da36dd22ccfd157c4514395330: contains zero-padded file modes
Я попробовал следующее (предложенное коллегой), чтобы найти оскорбительные коммиты, чтобы я мог их исправить. Я пробовал следующие методы.
- Пройдите все коммиты из
git rev-list HEAD
.
- Для каждого из этих коммитов выполните
git ls-tree -rd
, чтобы найти все соответствующие объекты SHAs.
- Посмотрите, соответствует ли какой-либо из этих элементов указанному выше в
git fsck
.
Логика вышеизложенного казалась мне правдой, но она не смогла найти оскорбительную фиксацию.
git rev-list --all --remotes | while read commit; do git ls-tree -rd $commit | grep -E "103b5dd53f7a96f8e3a02aea0d3d4d9bb19644ed|bb4729593e76f66b46292ad6ae61bfe909558337|4709aa73691ce7da36dd22ccfd157c4514395330" && echo -e "HIT @ $commit\n\n"; done
Что нам здесь не хватает? Как мы можем найти, что проблема с оскорбительным фиксацией или файлом имеет проблему? В конце я хочу исправить репозиторий.
Ответы
Ответ 1
Добавление обходного пути из комментариев в качестве ответа:
Восстановление репо с использованием git fast-export
, а затем git fast-import
решает проблему, но значения SHA изменятся, и ссылки на дерево не будут перенесены.
Создайте новый пустой репозиторий:
mkdir /newrepo
cd /newrepo
git init
Вернитесь к старому с предупреждениями fsck:
cd /oldrepo
Передайте данные с помощью быстрого экспорта из старых данных для быстрого импорта в новом репо
git fast-export --all | (cd /newrepo && git fast-import)
Ответ 2
Просто дополнение с @9000 ответом:
Создайте пустой репозиторий Git в ../newrepo
и
git fast-export --signed-tags=strip --all | (cd ../newrepo/ && git fast-import)