Как проверить, использует ли репозиторий Git систему LFS

GitGitBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии (LabEx) вы узнаете, как определить, использует ли репозиторий Git Git Large File Storage (LFS). Мы рассмотрим ключевые признаки использования LFS, начиная с изучения файла .gitattributes, который является важным для настройки отслеживания LFS.

Затем вы используете команду git lfs env для проверки среды и настроек LFS в репозитории. Наконец, мы проведем тестирование с файлами, отслеживаемыми LFS, чтобы убедиться, что LFS активно управляет большими файлами, как ожидалось. Этот практический подход предоставит вам навыки для идентификации и понимания интеграции LFS в ваших проектах Git.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/SetupandConfigGroup(["Setup and Config"]) git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git/SetupandConfigGroup -.-> git/config("Set Configurations") git/SetupandConfigGroup -.-> git/git("Show Version") git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") subgraph Lab Skills git/config -.-> lab-560102{{"Как проверить, использует ли репозиторий Git систему LFS"}} git/git -.-> lab-560102{{"Как проверить, использует ли репозиторий Git систему LFS"}} git/add -.-> lab-560102{{"Как проверить, использует ли репозиторий Git систему LFS"}} git/status -.-> lab-560102{{"Как проверить, использует ли репозиторий Git систему LFS"}} git/commit -.-> lab-560102{{"Как проверить, использует ли репозиторий Git систему LFS"}} end

Проверка наличия файла .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)=
  [email protected]: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.