Расширение git lfs

Расширение для хранения больших бинарных файлов на git.

Содержание

1 Общая информация

2 Установка

2.1 Linux

  • Gentoo:
    1emerge dev-vcs/git-lfs
    

3 Использование

3.1 Инициализация

  • Запускается однократно:
    1git lfs install
    
  • Прописывает хуки и переменные в файл конфигурации.

3.2 Подготовка нового репозитория

  • После создания нового репозитория запустите в нём:
    1git lfs install
    
  • При этом в репозитории появится специальный хук git pre-push, который будет передавать файлы git lfs на сервер при выполнении команды git push.
  • После инициализации хранилища git lfs для репозитория нужно указать, какие файлы нужно отслеживать, например:
    1git lfs track "*.pdf"
    
  • Информация будет занесена в файл .gitattributes.
  • После любого вызова git-lfs-track или git-lfs-untrack необходимо зафиксировать изменения в файле .gitattributes:
    1git add .gitattributes
    2git commit -m "track *.pdf files using Git LFS"
    
  • Git lfs поддерживает те же шаблоны, что и .gitignore, например:
     1# track all .ogg files in any directory
     2$ git lfs track "*.ogg"
     3
     4# track files named music.ogg in any directory
     5$ git lfs track "music.ogg"
     6
     7# track all files in the Assets directory and all subdirectories
     8$ git lfs track "Assets/"
     9
    10# track all files in the Assets directory but *not* subdirectories
    11$ git lfs track "Assets/*"
    12
    13# track all ogg files in Assets/Audio
    14$ git lfs track "Assets/Audio/*.ogg"
    15
    16# track all ogg files in any directory named Music
    17$ git lfs track "**/Music/*.ogg"
    18
    19# track png files containing "xxhdpi" in their name, in any directory
    20$ git lfs track "*xxhdpi*.png"
    
  • Шаблоны задаются относительно каталога, из которого выполняется команда git lfs track.
  • В отличие от .gitignore, git lfs не поддерживает отрицательные шаблоны.

3.3 Миграция старых репозиториев

  • Если в истории вашего репозитория уже есть большие файлы, они не будут отслеживаться git lfs.
  • Чтобы перенести существующие большие файлы в вашей истории на использование git lfs, нужно провести миграцию:
    1git lfs migrate import --include="*.pdf" --everything
    
  • Это перезапишет историю и изменит все идентификаторы объектов git в репозитории.
  • После этого придётся склонировать репозиторий повторно.

3.4 Обратная миграция

  • Репозиторий с git lfs можно преобразовать обратно в простой репозиторий git.
  • Следите за файлами, которые находятся в lfs:
    1git lfs ls-files
    
  • Перенесите ссылки из git lfs в git (например, для pdf-файлов):
    1git lfs migrate export --include="*.pdf" --everything
    
  • Это перезапишет историю и изменит все идентификаторы объектов git в вашем репозитории.
  • После этого придётся склонировать репозиторий повторно.
  • Удалите хуки:
    1git lfs uninstall --worktree
    
  • Удалить атрибут lfs из .gitattributes:
    1sed -i -e "s/filter=lfs diff=lfs merge=lfs -text/binary/g" .gitattributes
    

3.5 Мониторинг

  • Отображение полезной информацию о репозитории:
    1git lfs env
    
  • Просмотр файлов под управлением git lfs:
    1git lfs ls-files
    

3.6 Клонировании репозитория

  • Команда клонирования репозитория скачивает только файлы размером до 100MB.
  • Для получения больших файлов следует использовать команду:
    1git lfs  pull
    

3.7 Перенос на другой хостинг

  • Для переноса репозитория git lfs на другой хостинг можно использовать комбинацию команд git lfs fetch и git lfs push с параметром --all.
  • Например, перенесём репозиторий с сервера github на сервер bitbucket:
     1# create a bare clone of the GitHub repository
     2$ git clone --bare git@github.com:kannonboy/atlasteroids.git
     3$ cd atlasteroids
     4
     5# set up named remotes for Bitbucket and GitHub
     6$ git remote add bitbucket git@bitbucket.org:tpettersen/atlasteroids.git
     7$ git remote add github git@github.com:kannonboy/atlasteroids.git
     8
     9# fetch all Git LFS content from GitHub
    10$ git lfs fetch --all github
    11
    12# push all Git and Git LFS content to Bitbucket
    13$ git push --mirror bitbucket
    14$ git lfs push --all bitbucket
    

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие