Расширение 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