Введение
В этом лабораторном занятии (LabEx) вы узнаете, как определить, использует ли репозиторий Git Git Large File Storage (LFS). Мы рассмотрим ключевые признаки использования LFS, начиная с изучения файла .gitattributes, который является важным для настройки отслеживания LFS.
Затем вы используете команду git lfs env для проверки среды и настроек LFS в репозитории. Наконец, мы проведем тестирование с файлами, отслеживаемыми LFS, чтобы убедиться, что LFS активно управляет большими файлами, как ожидалось. Этот практический подход предоставит вам навыки для идентификации и понимания интеграции LFS в ваших проектах Git.
Проверка наличия файла .gitattributes
На этом этапе мы узнаем, как Git LFS использует специальный файл .gitattributes для отслеживания больших файлов. Этот файл сообщает Git, какие файлы должны обрабатываться с помощью LFS, а не храниться непосредственно в репозитории Git.
Сначала убедимся, что мы находимся в директории нашего проекта. Откройте терминал и введите:
cd ~/project/my-time-machine
Теперь создадим фиктивный файл, который мы позже попросим Git LFS отслеживать. Назовем его large_image.png.
echo "This is a large image file placeholder." > large_image.png
Эта команда создает файл с именем large_image.png и помещает в него некоторый текст. В реальной ситуации это был бы большой двоичный файл, такой как изображение, видео или архив.
Далее нам нужно сообщить Git LFS отслеживать файлы данного типа. Для этого используем команду git lfs track. Эта команда также автоматически создает или обновляет файл .gitattributes в вашем репозитории.
git lfs track "*.png"
Вы должны увидеть вывод, похожий на следующий:
Tracking "*.png"
Эта команда сообщает Git LFS отслеживать все файлы с расширением .png. Она также добавляет запись в файл .gitattributes.
Теперь посмотрим на содержимое файла .gitattributes, чтобы увидеть, что было добавлено.
cat .gitattributes
Вы должны увидеть вывод, похожий на следующий:
*.png filter=lfs diff=lfs merge=lfs -text
Эта строка в файле .gitattributes является тем, что сообщает Git использовать LFS для файлов .png. Она указывает, что для файлов, соответствующих шаблону *.png, Git должен применять фильтр lfs для сравнения, слияния и хранения. Часть -text гарантирует, что Git не будет пытаться обрабатывать двоичные файлы как текстовые.
Понимание файла .gitattributes является ключом к эффективному использованию Git LFS. Именно так вы настраиваете, какие типы больших файлов будут управляться с помощью LFS, делая основной репозиторий Git небольшим и быстрым.
Запуск команды git lfs env для проверки LFS
На этом этапе мы используем команду git lfs env для проверки среды Git LFS и подтверждения, что она правильно настроена в нашем репозитории. Эта команда предоставляет полезную информацию об установке и конфигурации Git LFS.
Убедитесь, что вы все еще находитесь в директории проекта:
cd ~/project/my-time-machine
Теперь запустите команду git lfs env:
git lfs env
Вы должны увидеть вывод, похожий на следующий (точный вывод может немного отличаться в зависимости от версии Git LFS и конфигурации системы):
git-lfs/3.x.x (Linux; zsh)
git version 2.34.1
Endpoint=
https://github.com/labex/my-time-machine.git/info/lfs (auth=none)
Endpoint (SSH)=
git@github.com:labex/my-time-machine.git/info/lfs (auth=none)
LocalWorkingDir=/home/labex/project/my-time-machine
LocalGitDir=/home/labex/project/my-time-machine/.git
LocalGitStorageDir=/home/labex/project/my-time-machine/.git/lfs
LocalMediaDir=/home/labex/project/my-time-machine/.git/lfs/objects
LocalRecentObjectsDir=/home/labex/project/my-time-machine/.git/lfs/objects/sha256/recent
LocalRecentObjectsLogDir=/home/labex/project/my-time-machine/.git/lfs/objects/sha256/recent/logs
LocalTmpDir=/home/labex/project/my-time-machine/.git/lfs/tmp
LocalTriggers=
Disk space utilization:
du -s -h .git/lfs
4.0K .git/lfs
Git LFS initialized.
Этот вывод содержит много информации, в том числе:
- Версия используемого Git LFS.
- Версия используемого Git.
- Конечные точки LFS (откуда файлы LFS будут отправляться и загружаться, хотя в этом лабораторном занятии мы не будем использовать удаленный репозиторий).
- Локальные директории, где Git LFS хранит свои данные в директории
.git. - Использование дискового пространства объектами LFS (в настоящее время очень мало, так как мы еще не добавили большие файлы).
- Подтверждение, что Git LFS инициализирован в этом репозитории.
Запуск команды git lfs env - это хороший способ быстро проверить, что Git LFS установлен и правильно настроен в текущем репозитории. Он помогает понять, где LFS хранит свои данные, и подтверждает, что необходимые хуки и фильтры установлены.
Тестирование с файлами, отслеживаемыми LFS
На этом последнем этапе мы добавим файл, отслеживаемый LFS, в промежуточную область (staging area) Git и зафиксируем изменения. Это продемонстрирует, как Git LFS обрабатывает файлы иначе, чем обычные файлы.
Сначала убедитесь, что вы находитесь в правильной директории:
cd ~/project/my-time-machine
Мы уже создали файл large_image.png и настроили Git LFS для отслеживания файлов с расширением .png на предыдущих этапах. Теперь добавим файл в промежуточную область с помощью команды git add:
git add large_image.png
Эта команда добавляет файл в список изменений для следующего коммита. Git LFS перехватывает эту операцию для large_image.png, так как он соответствует шаблону в файле .gitattributes. Вместо добавления всего содержимого файла в индекс Git, Git LFS добавляет небольшой "указатель" (pointer) на файл.
Проверим статус, чтобы увидеть файл в промежуточной области:
git status
Вы должны увидеть вывод, указывающий, что large_image.png - это новый файл, готовый к коммиту:
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitattributes
new file: large_image.png
Обратите внимание, что .gitattributes также добавлен в промежуточную область, так как мы изменили его на первом этапе.
Теперь зафиксируем изменения:
git commit -m "Add LFS tracked image placeholder"
Вы должны увидеть вывод, похожий на следующий:
[master (root-commit) abcdefg] Add LFS tracked image placeholder
2 files changed, X insertions(+)
create mode 100644 .gitattributes
create mode 100644 large_image.png
Сообщение коммита подтверждает, что были зафиксированы как .gitattributes, так и large_image.png. Однако фактическое содержимое large_image.png не сохраняется непосредственно в коммите Git. Вместо этого коммит сохраняет небольшой файл-указатель, а содержимое большого файла управляется Git LFS.
Чтобы увидеть разницу, посмотрим на содержимое файла, сохраненное в Git, с помощью команды git show. Эта команда показывает содержимое файла на определенном коммите.
git show HEAD:large_image.png
Вы должны увидеть вывод, похожий на следующий:
version https://git-lfs.github.com/spec/v1
oid sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
size 31
Это содержимое файла-указателя, а не фактический текст "This is a large image file placeholder.". Это демонстрирует, что Git хранит ссылку на большой файл, в то время как Git LFS управляет фактическим содержимым файла.
Это основной концепт Git LFS: поддержание легковесности основного репозитория Git путем хранения только указателей на большие файлы, в то время как содержимое больших файлов хранится отдельно.
Резюме
В этом лабораторном занятии мы научились проверять, использует ли репозиторий Git систему Git LFS. Мы начали с понимания роли файла .gitattributes, который является ключевым для настройки Git LFS. Мы создали фиктивный файл и использовали команду git lfs track, чтобы сообщить Git LFS о том, что он должен управлять файлами с определенным расширением, и посмотрели, как эта команда автоматически обновляет файл .gitattributes соответствующей конфигурацией. Затем мы изучили содержимое файла .gitattributes, чтобы увидеть запись, добавленную командой git lfs track, и поняли смысл атрибутов filter=lfs, diff=lfs, merge=lfs и -text.
Мы также изучили команду git lfs env как другой способ проверить наличие и настройку Git LFS в репозитории. Эта команда предоставляет подробную информацию о среде Git LFS, включая версию, настройки репозитория и шаблоны отслеживаемых файлов, давая полное представление о том, как настроена система LFS. Наконец, мы научились тестировать отслеживание файлов с помощью LFS, добавляя и коммитя файл, соответствующий настроенному шаблону, и убедились, что Git LFS правильно обрабатывает большие файлы, вместо того чтобы хранить их полное содержимое в основном репозитории Git.



