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

Как удалить файл, отслеживаемый git -lfs, и освободить квоту хранилища?

Как удалить файл без повторного использования и вернуть хранилище обратно в квоту github lfs?

ли удаление опорной точки файла в git истории работы в этой ситуации?

4b9b3361

Ответ 1

В настоящее время не существует отличного способа удаления больших активов из git-lfs. В настоящее время предложение GitHub состоит в том, чтобы использовать инструмент BFG, чтобы полностью удалить все существование файла из вашего репо.

Предположительно, он будет удален из хранилища lfs, когда в следующий раз будет запущена сборка мусора git от Github.

Подробнее см. https://help.github.com/articles/working-with-large-files/

Ответ 2

Ответ, данный Вейдером, не имеет отношения к вопросу.

Данная ссылка на статью о 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 из репозитория, удалите и заново создайте репозиторий. При удалении репозитория все связанные проблемы, пометки и пометки" также удаляются. "

Ответ 3

Ответ, данный Крисом, не точен; в сочетании с комментарием от 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 и любых ссылок на ранее отслеженные файлы, вы должны:

  1. удалить LFS из репозитория;
  2. очистить историю репо;
  3. удалите (или переименуйте) старое (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. Когда вы помещаете свою локальную (чистую) версию в новое, пустое хранилище, это будет происходить так, как будто (удаление/создание) никогда не происходило.