Подтвердить что ты не робот

Как исправить предупреждение 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

Что нам здесь не хватает? Как мы можем найти, что проблема с оскорбительным фиксацией или файлом имеет проблему? В конце я хочу исправить репозиторий.

4b9b3361

Ответ 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)