Расширение git lfs
Расширение для хранения больших бинарных файлов на git.
Содержание
1 Общая информация
- Сайт: https://git-lfs.com/
- Репозиторий: https://github.com/git-lfs/git-lfs/
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
: - 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