Введение
В этом лабораторном занятии мы узнаем, как определить, отслеживается ли каталог в системе контроля версий Git. Мы исследуем содержимое репозитория Git с помощью команды git ls-tree, чтобы проверить файлы и каталоги на определенном коммите.
Кроме того, мы будем использовать команду git status, чтобы проверить текущий статус отслеживания файлов в нашем репозитории и понять, как Git обрабатывает пустые каталоги.
Запустить git ls-tree для каталога
На этом этапе мы исследуем содержимое нашего Git-репозитория с помощью команды git ls-tree. Эта команда позволяет просматривать содержимое объекта дерева (tree object), который представляет состояние каталога на определенном коммите.
Сначала убедитесь, что вы находитесь в каталоге my-time-machine:
cd ~/project/my-time-machine
Теперь используем команду git ls-tree, чтобы посмотреть содержимое последнего коммита. Мы будем использовать HEAD для ссылки на последний коммит:
git ls-tree HEAD
Вы должны увидеть вывод, похожий на следующий:
100644 blob a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 message.txt
Разберем этот вывод:
100644: Это режим файла, указывающий, что это обычный файл.blob: Это указывает тип объекта. Объектblobхранит содержимое файла.a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9: Это уникальный идентификатор (хэш SHA-1) объектаblob, который хранит содержимое файлаmessage.txt. Ваш хэш будет другим.message.txt: Это имя файла.
Команда git ls-tree полезна для проверки содержимого определенного коммита без переключения на весь коммит. Она показывает файлы и каталоги, которые были отслежены Git в тот момент времени.
Представьте, что вы заглядываете в определенную капсулу времени (коммит), чтобы точно увидеть, какие файлы были включены и каковы были их уникальные отпечатки (хэши blob). Это мощный способ понять структуру и содержимое истории вашего проекта.
Использовать git status для проверки отслеживания
На предыдущих этапах мы создали файл и закоммитили его в наш Git-репозиторий. Теперь используем команду git status еще раз, чтобы посмотреть текущее состояние нашего репозитория и убедиться, что наш файл отслеживается.
Убедитесь, что вы по-прежнему находитесь в каталоге ~/project/my-time-machine:
cd ~/project/my-time-machine
Теперь запустите команду git status:
git status
Вы должны увидеть вывод, похожий на следующий:
On branch master
nothing to commit, working tree clean
Этот вывод сообщает нам несколько важных вещей:
On branch master: В данный момент мы находимся на веткеmaster, которая представляет основную линию разработки нашего проекта.nothing to commit, working tree clean: Это ключевая часть. Она означает, что в рабочем каталоге нет изменений, которые еще не были закоммичены. Git отслеживает все файлы, которые должны быть отслежены, и нет новых или измененных файлов, которые нужно добавить или закоммитить.
Это состояние является желательным, когда вы завершили внесение изменений и закоммитили их. Это подтверждает, что Git знает о текущем состоянии вашего проекта и что все в вашем репозитории актуально.
Сравнение этого вывода с выводом команды git status, который мы видели до создания и коммита файла message.txt, показывает разницу между пустым репозиторием, репозиторием с неотслеживаемыми файлами и чистым репозиторием с отслеживаемыми файлами.
Понимание команды git status является важным, так как это ваш главный инструмент для понимания того, что происходит в вашем репозитории и каких действий вам нужно предпринять (например, добавить или закоммитить файлы).
Тестирование пустых каталогов
На этом этапе мы исследуем, как Git обрабатывает пустые каталоги. Это часто вызывает путаницу у новичков, так как Git ведет себя по-разному с каталогами и файлами.
Сначала убедитесь, что вы находитесь в каталоге ~/project/my-time-machine:
cd ~/project/my-time-machine
Теперь создадим новый пустой каталог внутри нашего проекта:
mkdir empty-folder
Мы создали каталог. Теперь проверим статус нашего репозитория с помощью команды git status:
git status
Вы должны увидеть вывод, похожий на следующий:
On branch master
nothing to commit, working tree clean
Обратите внимание, что Git не сообщает о empty-folder как о неотслеживаемом каталоге. Это потому, что Git отслеживает содержимое файлов, а не сами каталоги. Пустой каталог не имеет содержимого для отслеживания.
Это важное понятие в Git. Если вам нужно включить пустой каталог в ваш репозиторий, распространенное решение - поместить в него фиктивный файл. Обычно создают файл с именем .gitkeep (хотя имя не имеет значения, это просто соглашение).
Создадим файл .gitkeep внутри каталога empty-folder:
touch empty-folder/.gitkeep
Теперь проверим статус с помощью git status еще раз:
git status
На этот раз вы должны увидеть:
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
untracked files present (use "git add" to track)
Untracked files:
(use "git add <file>..." to include in what will be committed)
empty-folder/
Теперь Git видит empty-folder/, так как он содержит файл (.gitkeep), который можно отслеживать.
Это показывает, что Git отслеживает наличие файлов в каталогах, а не сами каталоги. Чтобы включить каталог в историю вашего репозитория, он должен содержать хотя бы один отслеживаемый файл.
Резюме
В этом практическом занятии мы научились проверять, отслеживает ли Git каталог и его содержимое. Мы использовали команду git ls-tree HEAD для изучения содержимого последнего коммита, понимая, что она отображает отслеживаемые файлы, а также связанные с ними объекты-болбы (blob objects) и их хэши. Эта команда предоставляет снимок состояния репозитория на определенном коммите.
Мы также использовали команду git status для проверки текущего статуса отслеживания файлов в репозитории, убеждаясь, что закоммиченные файлы действительно отслеживаются Git. Наконец, мы исследовали, как Git обрабатывает пустые каталоги, и обнаружили, что Git не отслеживает пустые каталоги напрямую, а отслеживает файлы внутри них.



