Как удалить файл без повторного использования и вернуть хранилище обратно в квоту github lfs?
ли удаление опорной точки файла в git истории работы в этой ситуации?
В настоящее время не существует отличного способа удаления больших активов из git-lfs
. В настоящее время предложение GitHub состоит в том, чтобы использовать инструмент BFG, чтобы полностью удалить все существование файла из вашего репо.
Предположительно, он будет удален из хранилища lfs, когда в следующий раз будет запущена сборка мусора git от Github.
Подробнее см. https://help.github.com/articles/working-with-large-files/
Ответ, данный Вейдером, не имеет отношения к вопросу.
Данная ссылка на статью о github посвящена большим файлам, которые непосредственно загружаются в репозиторий git, но это НЕ то же самое, что git-lfs!
Что касается вопроса: как эта ситуация обрабатывается, зависит от базового сервера хранения. Поддержка git-lfs может предоставляться различными службами, например, GitHub или GitLab.
GitLab хранит файлы git-lfs не для каждого хранилища. Они хранятся по их хэш-значению SHA-256. Если один и тот же файл используется в нескольких репозиториях (например, клонах), он сохраняется только один раз. От GitLab зависит только то, как он обрабатывает указанные файлы, и его следует искать в руководстве.
В соответствии с документацией GitHubs (https://help.github.com/articles/removing-files-from-git-large-file-storage/) рекомендуется удалить и заново создать репозиторий: “Чтобы удалить объекты Git LFS из репозитория, удалите и заново создайте репозиторий. При удалении репозитория все связанные проблемы, пометки и пометки” также удаляются. “
Ответ, данный Крисом, не точен; в сочетании с комментарием от 0xcaff (“это ужасное решение”) он может ввести в заблуждение неопытного пользователя (или отвлеченного читателя).
Правильный ответ – смесь Вейдера и Криса.
Я только что решил случай, когда я хотел отразить репозиторий (пусть назовем его REPO-1
), который когда-то использовал LFS, но не был очищен от больших файлов в истории.
В какой-то момент в прошлом месяце я удалил поддержку LFS в
REPO-1
сgit lfs uninstall
. И это работало нормально для последующегоgit clone
(то есть, нетgit-lfs
больше). Но сегодня, когда я попыталсяpull
ранееpush --mirror
версияREPO-1
, я получил сообщенияSmudge error: Error downloading <big-filename> ... Object does not exist on the server: [404] Object does not exist on the server
Итак, если вы хотите избавиться от LFS и любых ссылок на ранее отслеженные файлы, вы должны:
- удалить LFS из репозитория;
- очистить историю репо;
- удалите (или переименуйте) старое (github) репо, создайте новое и вставьте в него очищенное репо.
1
Удалить LFS можно с помощью простой команды, например git lfs uninstall.
2
Очистить историю репо немного страшно, но с git filter-branch
все работает отлично, элемента 3 документации Github –https://help.github.com/en/articles/removing-sensitive-data-from-a-repository – должно быть достаточно:
$ git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch FILENAME-1 FILENAME-2 FILENAME-3" \
--prune-empty --tag-name-filter cat -- --all
3
Удаление и воссоздание репозитория не так разрушительно, как кажется, помните, что ваш локальный репозиторий является полностью независимым, самоподдерживающимся клоном того, что есть в Github. Когда вы помещаете свою локальную (чистую) версию в новое, пустое хранилище, это будет происходить так, как будто (удаление/создание) никогда не происходило.