Расширение git lfs
2023-11-13
·
3 мин. для прочтения
Расширение для хранения больших бинарных файлов на git.
Содержание
1 Общая информация
- Сайт: https://git-lfs.com/
- Репозиторий: https://github.com/git-lfs/git-lfs/
2 Установка
2.1 Linux
- Gentoo:
emerge dev-vcs/git-lfs
3 Использование
3.1 Инициализация
- Запускается однократно:
git lfs install - Прописывает хуки и переменные в файл конфигурации.
3.2 Подготовка нового репозитория
- После создания нового репозитория запустите в нём:
git lfs install - При этом в репозитории появится специальный хук git
pre-push, который будет передавать файлы git lfs на сервер при выполнении командыgit push. - После инициализации хранилища git lfs для репозитория нужно указать, какие файлы нужно отслеживать, например:
git lfs track "*.pdf" - Информация будет занесена в файл
.gitattributes. - После любого вызова
git-lfs-trackилиgit-lfs-untrackнеобходимо зафиксировать изменения в файле.gitattributes:git add .gitattributes git commit -m "track *.pdf files using Git LFS" - Git lfs поддерживает те же шаблоны, что и
.gitignore, например:# track all .ogg files in any directory $ git lfs track "*.ogg" # track files named music.ogg in any directory $ git lfs track "music.ogg" # track all files in the Assets directory and all subdirectories $ git lfs track "Assets/" # track all files in the Assets directory but *not* subdirectories $ git lfs track "Assets/*" # track all ogg files in Assets/Audio $ git lfs track "Assets/Audio/*.ogg" # track all ogg files in any directory named Music $ git lfs track "**/Music/*.ogg" # track png files containing "xxhdpi" in their name, in any directory $ git lfs track "*xxhdpi*.png" - Шаблоны задаются относительно каталога, из которого выполняется команда
git lfs track. - В отличие от
.gitignore, git lfs не поддерживает отрицательные шаблоны.
3.3 Миграция старых репозиториев
- Если в истории вашего репозитория уже есть большие файлы, они не будут отслеживаться git lfs.
- Чтобы перенести существующие большие файлы в вашей истории на использование git lfs, нужно провести миграцию:
git lfs migrate import --include="*.pdf" --everything - Это перезапишет историю и изменит все идентификаторы объектов git в репозитории.
- После этого придётся склонировать репозиторий повторно.
3.4 Обратная миграция
- Репозиторий с git lfs можно преобразовать обратно в простой репозиторий git.
- Следите за файлами, которые находятся в lfs:
git lfs ls-files - Перенесите ссылки из git lfs в git (например, для pdf-файлов):
git lfs migrate export --include="*.pdf" --everything - Это перезапишет историю и изменит все идентификаторы объектов git в вашем репозитории.
- После этого придётся склонировать репозиторий повторно.
- Удалите хуки:
git lfs uninstall --worktree - Удалить атрибут
lfsиз.gitattributes:sed -i -e "s/filter=lfs diff=lfs merge=lfs -text/binary/g" .gitattributes
3.5 Мониторинг
- Отображение полезной информацию о репозитории:
git lfs env - Просмотр файлов под управлением git lfs:
git lfs ls-files
3.6 Клонировании репозитория
- Команда клонирования репозитория скачивает только файлы размером до 100MB.
- Для получения больших файлов следует использовать команду:
git lfs pull
3.7 Перенос на другой хостинг
- Для переноса репозитория git lfs на другой хостинг можно использовать комбинацию команд
git lfs fetchиgit lfs pushс параметром--all. - Например, перенесём репозиторий с сервера github на сервер bitbucket:
# create a bare clone of the GitHub repository $ git clone --bare git@github.com:kannonboy/atlasteroids.git $ cd atlasteroids # set up named remotes for Bitbucket and GitHub $ git remote add bitbucket git@bitbucket.org:tpettersen/atlasteroids.git $ git remote add github git@github.com:kannonboy/atlasteroids.git # fetch all Git LFS content from GitHub $ git lfs fetch --all github # push all Git and Git LFS content to Bitbucket $ git push --mirror bitbucket $ git lfs push --all bitbucket