Рабочая директория
Тема дорожной карты · Изучи Git
Рабочая директория (рабочее дерево) — это живой чекаут, реальные файлы, которые вы правите на диске. Она играет ключевую роль в работе с Git, позволяя вам видеть и редактировать изменения перед тем, как они будут закоммитированы. Файлы в рабочей директории имеют три состояния: неотслеживаемые (Git их не знает), изменённые (отличаются от текущего коммита) или неизменённые (совпадают с текущим коммитом). Команда git status предоставляет сводку текущего состояния рабочей директории и индекса.
Как это работает
Рабочая директория представляет собой объектную модель, где контент файла хранится как blob, директории как tree, а snapshots представлены как commit-объекты. Коммит-объекты содержат ссылки на соответствующие деревья (tree), родительские коммиты, автора/коммиттера и сообщение коммита. Refs, такие как refs/heads/main, refs/tags/v1.0 и HEAD, являются просто файлами, указывающими на определённые коммиты по их SHA-суммам. Операции в Git не изменяют историю напрямую, а создают новые коммиты, что позволяет сохранять целостность истории. Garbage Collection (GC) в итоге удаляет неиспользуемые объекты, которые больше не ссылаются на них.
Когда применять
Рабочую директорию следует использовать для редактирования файлов, которые вы планируете закоммитить. Она помогает вам увидеть изменения перед тем, как они будут зафиксированы в истории. Объектная модель Git становится особенно полезной, когда вы сталкиваетесь с вопросами типа "что только что произошло с моей историей?". Команда git cat-file -p <sha> позволяет вам просмотреть содержимое объекта по его SHA-сумме. Команда git reflog помогает найти "потерянные" коммиты, которые на самом деле не исчезают в течение 30 дней.
Типичные ошибки
Одной из распространённых ошибок является убеждение, что коммиты представляют собой разницу (diff) между состояниями, тогда как на самом деле они являются snapshotами состояния. Также распространена паника при удалении директории .git при возникновении проблем, что приводит к уничтожению локальных коммитов, которые можно было бы восстановить. Наконец, ошибочное предположение о вероятности коллизий SHA-сумм, основанное на теоретических рассуждениях о парадоксе дня рождения, не соответствует реальности работы Git.