git worktree
git worktree: управлять несколькими рабочими деревьями, привязанными к одному репозиторию.
Команда git worktree позволяет развернуть один и тот же Git-репозиторий сразу в нескольких директориях. У каждого такого рабочего дерева есть свои файлы, свой указатель HEAD и своя рабочая директория. Это значит, что можно держать открытыми разные ветки параллельно, не переключаясь туда-сюда в одной папке.
Все рабочие деревья принадлежат одному репозиторию. Они делят общую базу данных объектов Git и большую часть метаданных. Благодаря этому рабочее дерево получается намного «легче», чем полный клон репозитория — отличный вариант, чтобы заглянуть в другую ветку, исправить срочную ошибку или по-быстрому провести эксперимент изолированно от текущих файлов.
Частый сценарий использования — дать ИИ-агенту работать над задачей параллельно с тобой. ИИ работает в своей ветке, развёрнутой в отдельной директории. Так он ничего не сломает в твоём основном рабочем дереве, где можно продолжать писать код вручную. По сути, создание рабочего дерева похоже на клонирование репозитория в другую папку, но работает немного быстрее.
Git worktree или полный клон в отдельной папке
Плюсы рабочих деревьев
- Быстрее создаются, так как не нужно копировать все данные репозитория.
- Занимают меньше места на диске, потому что рабочие деревья на одном компьютере используют общие данные репозитория.
- Многие инструменты разработки теперь поддерживают рабочие деревья, особенно для работы с ИИ-агентами.
Минусы рабочих деревьев
- Обычно одну и ту же ветку нельзя развернуть в двух рабочих деревьях одновременно.
- Изменение настроек репозитория или загрузка данных (
fetch) затрагивает все привязанные рабочие деревья. - Если нужна полностью независимая песочница с отдельными удалёнными репозиториями (англ.
remotes) или настройками, лучше сделать полный клон.
Примеры
Создать новое рабочее дерево для существующей ветки release:
git worktree add ../project-release releaseСоздать новое рабочее дерево и новую ветку hotfix/login, начав её от main:
git worktree add -b hotfix/login ../project-hotfix mainПоказать список всех рабочих деревьев, привязанных к текущему репозиторию:
git worktree listУдалить больше не нужное рабочее дерево:
git worktree remove ../project-hotfix.gitignoregit checkoutgit configgit taggit worktree