Рабочее дерево
Рабочее дерево (англ. working tree), также известное как рабочая директория (англ. working directory) или рабочая копия (англ. working copy) — это файлы и папки проекта, которые можно редактировать, удалять и организовывать на компьютере. Именно здесь ты вносишь изменения в файлы, прежде чем закоммитить их в репозиторий.
Пример
Допустим, идёт работа над веб-приложением. Проект находится под контролем версий Git, и в файловом менеджере видно примерно следующее:
project-root/
├── .git/
├── src/
│ ├── components/
│ │ ├── header.js
│ │ └── footer.js
│ ├── utils/
│ │ └── helpers.js
│ └── main.js
├── index.html
├── styles.css
├── app.js
└── config.jsonВопрос: почему это называется рабочим деревом (tree), если оно совсем не похоже на дерево?
Ответ: во‑первых, оно перевёрнуто. Во‑вторых, это метафора! Дерево описывает иерархическую структуру файлов и папок в проекте. Как у дерева есть ветви и листья, так и у проекта есть папки (ветви) и файлы (листья).
Папка .git содержит все метаданные и базу объектов для репозитория Git. Она скрыта от обычного просмотра, потому что с ней не предполагается взаимодействовать напрямую. Однако при работе в терминале эта папка часто видна в списках файлов.
Остальные файлы и папки (вроде src/, index.html, styles.css и т. д.) образуют рабочее дерево. Эти файлы можно редактировать, добавлять новые или удалять существующие. Это те файлы, за изменениями в которых следит Git.
Как это работает
Git отслеживает разницу между файлами в рабочем дереве и последним коммитом в текущей ветке. Это позволяет свободно менять, добавлять и удалять файлы в рабочем дереве, не влияя сразу на историю коммитов репозитория. Как только изменения готовы, их можно добавить в область подготовки (командой вроде git add) и затем создать новый коммит, сохранив снимок состояния в истории проекта.
При переключении на другую ветку или конкретный коммит файлы в рабочем дереве обновляются так, чтобы соответствовать состоянию репозитория на тот момент. Затем в эти файлы можно вносить изменения: добавлять новые функции, исправлять ошибки или улучшать код.
Рабочее дерево важно по нескольким причинам:
- Оно даёт осязаемое, редактируемое представление проекта в его текущем состоянии или в любой активной ветке.
- Оно позволяет работать над файлами проекта и тестировать изменения перед созданием нового коммита.
- Оно позволяет сразу увидеть в файловой системе результат переключения веток или получения изменений из удалённого репозитория.
Связанные команды
Проверить состояние рабочего дерева:
git statusПосмотреть отличия рабочего дерева от последнего коммита:
git diffОтменить локальные правки в файле внутри рабочего дерева:
git restore path/to/file.txtДобавить все изменения в текущей папке (.) в область подготовки:
git add ..gitignoregit checkoutgit configgit taggit worktree