Как проверить, отслеживается ли каталог в Git

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

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

Введение

В этом лабораторном занятии мы узнаем, как определить, отслеживается ли каталог в системе контроля версий Git. Мы исследуем содержимое репозитория Git с помощью команды git ls-tree, чтобы проверить файлы и каталоги на определенном коммите.

Кроме того, мы будем использовать команду git status, чтобы проверить текущий статус отслеживания файлов в нашем репозитории и понять, как Git обрабатывает пустые каталоги.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/SetupandConfigGroup(["Setup and Config"]) git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git/SetupandConfigGroup -.-> git/git("Show Version") git/BasicOperationsGroup -.-> git/status("Check Status") subgraph Lab Skills git/git -.-> lab-560020{{"Как проверить, отслеживается ли каталог в Git"}} git/status -.-> lab-560020{{"Как проверить, отслеживается ли каталог в Git"}} end

Запуск команды 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 не отслеживает пустые каталоги напрямую, а отслеживает файлы внутри них.