Как уменьшить git LFS репо - PullRequest
0 голосов
/ 10 января 2020

В моей компании мы храним файлы, связанные с разработкой системы, с git LFS. Этот репозиторий содержит данные CAD, изображения, документы (* .pdf, * .docx, * .xlsx) и так далее. Существует абсолютная необходимость иметь все файлы под контролем версий. Однако то, как использовался репозиторий, привело к тому, что общий объем хранилища достиг 8 ГБ, несмотря на то, что все файлы отслеживались LFS.

В основном все было перенесено в основную ветку, которая, похоже, делает хранилище LFS устарел, поскольку ничего не может быть удалено для сохранения локального хранилища.

Вопрос

Есть ли способ разрешить ретроактивную обработку большего количества локальных объектов?

1 Ответ

1 голос
/ 10 января 2020

Вы можете использовать следующую команду

git lfs prune

От документы ,

ОПИСАНИЕ

Удаляет локальные копии файлов LFS, которые старые, тем самым освобождая место на диске. Prune работает, перечисляя все локально сохраненные объекты, а затем удаляя любые объекты, на которые не ссылается хотя бы ОДИН из следующих элементов:

  • текущая проверка
  • 'недавняя ветвь'; см. [ПОСЛЕДНИЕ ФАЙЛЫ]
  • «недавний коммит» в текущей или недавних ветках; см. [ПОСЛЕДНИЕ ФАЙЛЫ]
  • коммит, который не был передан; см. [UNPUSHED LFS FILES]
  • любые другие проверки рабочего дерева; смотрите git -worktree (1)

В общих чертах, prune удалит файлы, которые вы не используете и которые не являются 'недавними', если они были выдвинуты, т.е. Локальная копия не единственная.

Рефлог не рассматривается, только коммиты. Поэтому объекты LFS, на которые ссылаются только осиротевшие коммиты, всегда удаляются.

Примечание: вам не следует запускать git lfs prune, если у вас есть разные репозитории, совместно использующие один и тот же каталог пользовательских хранилищ; см. git -lfs-config (1) для получения дополнительной информации о параметре lfs.storage.


Поскольку вы не можете удалить из-за файлов отслеживания LFS, на которые ссылается текущая проверка можно клонировать локальное репо без отслеживаемых файлов LFS, используя параметр GIT_LFS_SKIP_SMUDGE

export GIT_LFS_SKIP_SMUDGE=1
git clone /path/to/local/repo test

Это должно уменьшить размер репо, поскольку отслеживаемые файлы LFS будут преобразованы в файлы указателей. Если вы хотите использовать отслеживаемые файлы LFS, вам нужно сделать git lfs pull.

Поскольку git lfs pull будет загружать все отслеживаемые файлы LFS в текущей проверке, вы можете использовать опции включения и исключения для включения или исключения определенных файлов.

Например, вы можете включить в репозиторий все PDF-файлы (отслеживаемые файлы LFS) с помощью

git lfs pull -I "*.pdf"

или исключить их с помощью

git lfs pull -X "*.pdf"

Обратите внимание, что вы можете клонировать из само удаленное репо, клонирование локального репо в тестовое репо - это всего лишь пример, показывающий, что размер уменьшен.

...