Удаление файла из истории репозитория git
Нельзя сказать наверняка, но вероятно, есть одна или несколько упакованных ссылок, которые все еще ссылаются на старые коммиты, сделанные до того, как вы запустили git filter-branch
.
Это объясняет, почему git fsck --full --unreachable
не считает большой двоичный объект недоступным объектом,
даже если срок действия вашего журнала ссылок истек и исходные распакованные ссылки были удалены.
Вот что надо сделать после того, как будут выполнены git filter-branch
и git gc
:
1) Убедитесь, что оригинальные ссылки исчезли:
2) Уберите все reflog entries
:
3) Проверьте все устаревшие packed refs
:
Потенциально это может быть сложно, в зависимости от того, сколько у вас упакованных ссылок.
Нет ни одной команды Git, которая автоматизировала бы это, поэтому придется сделать это вручную.
Сделайте резервную копию .git/packed-refs
. Теперь отредактируйте .git/packed-refs.
Проверьте наличие старых ссылок - в частности, посмотрите, не упакованы ли какие-либо ссылки из .git/refs/original
.
Если вы обнаружите какие-либо старые файлы, которые не должны там быть, удалите их (удалите строку для этой ссылки).
После завершения очистки упакованного файла -refs
посмотрите, замечает ли git fsck недоступные объекты:
git fsck
теперь сообщает, что ваш большой объект недоступен, можно перейти к следующему шагу.
4) Перепакуйте запакованный архив:
Это гарантирует, что недоступные объекты будут распакованы и останутся распакованными.5) Обрежьте недоступные объекты:
Это должно сработать. У Git действительно должен быть лучший способ управления упакованными ссылками.При отсутствии лучшего способа ручное редактирование упакованного файла
-refs
может быть единственным способом.