Урок 03 · Одно понятие
Ветки развели историю. Осталось развести папки — и тогда два агента будут работать не по очереди, а одновременно.
Зачем это в твоей миссии
Это тот самый урок, ради которого затевался курс. Параллельная работа агентов упирается не в Git и не в модель — она упирается в одну простую физическую вещь. Worktree её и снимает.
Тот же магазин, что и в прошлом уроке. Ты уже умеешь заводить ветки, и в прошлый раз агенты работали по очереди: ты переключал папку то на одну ветку, то на другую, и передавал её от одного к другому.
Теперь хочется по-настоящему одновременно: пока первый агент два дня пишет оплату, второй за двадцать минут чинит корзину. И тут ты упираешься в стену, у которой нет никакого отношения к Git.
Пройди историю по шагам. Смотри на нижнюю часть — там теперь может быть больше одной папки.
После этого официальная формулировка читается спокойно. Документация Git говорит так: «репозиторий может обслуживать несколько рабочих деревьев, позволяя держать развёрнутыми больше одной ветки одновременно».
| Слово | Что это значит в нашей истории |
|---|---|
| рабочее дерево | Папка с файлами проекта в развёрнутом виде. Та самая, которую ты видишь в Finder и открываешь в редакторе. |
| несколько | Папок может быть сколько угодно. Репозиторий при этом остаётся один — история общая на всех. |
| больше одной ветки одновременно | Вот она, вся суть. Одна папка показывает одну ветку. Нужны две ветки развёрнутыми разом — нужны две папки. |
Заметь, чего в определении нет: слова «копия». Проект не копируется, репозиторий не дублируется. Появляется ещё одно окно в ту же самую историю.
Стоит посмотреть, потому что это снимает почти все страхи разом:
проект/ ← рабочее дерево №1
.git/ ← вся история проекта, одна на всех
worktrees/оплата/ ← рабочее дерево №2
.git ← файл на 105 байт, а не папка
В новой папке .git — это не хранилище, а текстовый файл в одну строку:
gitdir: /путь/к/проекту/.git/worktrees/оплата
Буквально записка: «история не здесь, история вон там». Отсюда и вес. На реальном проекте это выглядит так: сам проект — 65 МБ, новое рабочее дерево — 168 КБ. В четыреста раз меньше, потому что в дерево разворачиваются только те файлы, которые попадают в снимки. Всё тяжёлое — зависимости, сборки, кэши — Git не хранит, а значит, и разворачивать ему нечего.
Встроенная защита от дурака
Одну и ту же ветку нельзя развернуть в двух деревьях сразу — Git просто откажется. Поэтому два агента физически не могут случайно оказаться на одной ветке и затоптать работу друг друга. Они всегда на разных.
Об этом редко говорят, а зря. Worktree — не обязательный ритуал, а решение конкретной проблемы. Если ты работаешь один и последовательно, обычного переключения веток хватает с запасом: закоммитил недоделанное, ушёл на main, починил, вернулся — работа ждала тебя на месте.
Формула короткая:
Переключение веток — для работы по очереди. Worktrees — для работы одновременно.
Поэтому отдельная папка ради правки на две минуты — лишняя возня. А вот второй агент — это уже одновременность, и тут без неё никак.
Свежее рабочее дерево — это чистая развёртка снимка. А в снимке, как мы разбирали, лежат только отслеживаемые файлы. Значит, в новой папке не будет ни зависимостей, ни .env: ни того, что весит гигабайты и восстанавливается по рецепту, ни того, что намеренно держат подальше от снимков.
Выглядит это как «агент зашёл в новую папку, и ничего не работает». Лечится один раз и навсегда:
.env и прочие локальные настройки — в Claude Code для этого есть файл .worktreeinclude: перечисляешь в нём, что копировать в каждое новое дерево, и дальше это происходит само.Если проект на pnpm, дублирования почти нет
pnpm держит один общий склад пакетов и собирает node_modules из жёстких ссылок на него. Уже скачанный файл в новом дереве не копируется — он получает второе имя. Десять деревьев с одинаковыми зависимостями занимают на диске столько же, сколько одно, а установка проходит за секунды.
Условие одно, прямо из документации pnpm: склад должен лежать на том же диске, что и проекты. Иначе пакеты будут копироваться, а не связываться.
Подробнее про это — в отдельном уроке npm и pnpm: как зависимости попадают на диск, с замерами.
Хорошая новость: в двух из трёх мест говорить ничего не надо.
Ничего делать не нужно. По документации, каждая новая сессия автоматически получает свой worktree. Два агента параллельно — это просто две сессии.
Запуск с именем: claude -w оплата. Папка, ветка и агент внутри — всё создаётся разом. Второй терминал с другим именем — второй агент.
Настройка при создании воркспейса: изоляция worktree вместо local. Отвести можно от основной ветки, от существующей или сразу из чужого PR.
А если ты уже в разговоре с агентом и понял, что задача разрослась, — работает и просто словами. Claude Code умеет перейти в отдельное дерево по ходу дела, сам.
Задача разрослась посреди разговора
Давай эту задачу делать в отдельном worktree. Заведи ветку feature/pay, перейди туда и продолжай работу там.
Говори «worktree» латиницей. Русское «дерево» агент поймёт как структуру каталогов и покажет тебе дерево папок.
Ставишь задачу второму агенту
Работай в своём worktree на ветке fix/cart. В основную папку не заходи — там сейчас другая работа.
Вторая фраза важнее первой. Она задаёт границу явно, а не надеется, что агент догадается сам.
Хочешь посмотреть чужую работу
Разверни ветку feature/pay в отдельном worktree и покажи, что там изменилось. Мою текущую работу не трогай.
История общая, поэтому чужой коммит виден сразу и никуда его тянуть не надо. Позже так же будешь смотреть работу подрядчиков.
Чего просить не стоит
Формулировка «сделай копию проекта в другой папке» звучит похоже, но агент может понять её буквально и скопировать папку целиком. Получатся два независимых проекта с разными историями — ровно то, чего worktree позволяет избежать. Слово worktree такой двусмысленности не оставляет.
Первоисточники к этому уроку
Официальная справка git-worktree — на английском, зато первоисточник. Первый абзац ровно про то, что разобрано выше.
Claude Code → Run parallel sessions with worktrees — там же про .worktreeinclude и про автоматические деревья в десктопе. Paseo → Git worktrees — как это устроено в воркспейсах Paseo.