Тестирование с файлами, отслеживаемыми 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 путем хранения только указателей на большие файлы, в то время как содержимое больших файлов хранится отдельно.