← Модуль 3: Power User
3.4

Git Worktrees: параллельные сессии в одном репо

Цель: разрабатывать 2-3 фичи **одновременно**, каждая в изолированной копии репо. Ждать Claude больше не нужно.

Что такое git worktree

Git worktree — вторая (третья, десятая) рабочая директория, привязанная к одному репозиторию, но на другой ветке.

git worktree add ../auth-feature -b auth-feature

Теперь у тебя:

  • Оригинальный чекаут на main
  • Соседняя директория ../auth-feature/ на ветке auth-feature
  • Обе видят один и тот же .git/ под капотом

В Claude Code

Встроенная поддержка:

claude -w auth-feature       # короткая форма
claude --worktree billing    # полная

Или галочка worktree в десктопном приложении.

Claude сам создаст worktree, переключится в него, начнёт сессию.

Типовой workflow

Открываешь 3 терминала:

Terminal 1: claude --worktree auth-feature
Terminal 2: claude --worktree billing-feature  
Terminal 3: claude --worktree test-suite

Каждая сессия:

  • На своей ветке
  • В своей директории
  • С отдельным контекстом — не мешают друг другу
  • Коммитится независимо

Когда фича готова → мержишь ветку в main → worktree можно удалить (git worktree remove).

/batch — массовые миграции через worktrees

Команда /batch распределяет работу между агентами в отдельных worktrees. Десятки, сотни, тысячи одновременно.

Пример:

claude "/batch migrate all our 47 express routes from callbacks to async/await"

Claude:

  1. Уточнит задачу (спросит детали)
  2. Поделит на 47 подзадач
  3. Создаст 47 worktrees
  4. Запустит 47 параллельных агентов
  5. Соберёт результаты

Подходит для:

  • Миграций версий библиотек
  • Замены паттернов по всему коду
  • Автоматического обновления тестов

Не-git VCS

Если у тебя не git (Perforce, Mercurial) — хук WorktreeCreate со своей логикой создания изолированной копии. Redis? Тоже можно адаптировать.

Грабли

node_modules / venv в каждом worktree

Каждая директория — свои зависимости. 3 worktrees = 3 раза npm install. Лечения:

# Симлинк node_modules
ln -s ../main/node_modules ./node_modules
 
# Или pnpm с глобальным store — работает из коробки

Порты dev-сервера

# main
npm run dev  # :3000
 
# auth-feature
PORT=3001 npm run dev
 
# billing  
PORT=3002 npm run dev

Настрой переменные окружения в .env.local разных worktrees.

CLAUDE.md дрифт

CLAUDE.md читается из worktree-директории. Если редактируешь в одном — не автоматически подхватывается в других до синка веток. Синхронизируй через мерж main.

Забыть worktree

Накопилось 10 старых worktrees? Почисти:

git worktree list
git worktree prune
git worktree remove <path>

Когда использовать

✅ Две независимые фичи одновременно ✅ Рефакторинг в параллель с продолжением разработки
✅ Эксперимент — если не зашло, worktree удаляется, main чист ✅ /batch для массовых миграций ✅ Параллельный прогон долгих тестов/бенчмарков

Когда НЕ использовать

❌ Зависимые фичи (конфликты мержа неизбежны) ❌ Простые правки (overhead сетапа больше выигрыша) ❌ Если ты не умеешь разруливать merge conflicts — сначала научись

Практика (15 минут)

Задача

  1. Возьми свой проект

  2. Запусти:

    claude --worktree experiment-a

    В этой сессии: "add a small feature like changing a button color"

  3. Открой второй терминал:

    claude --worktree experiment-b

    В этой: "add a logging statement to the main entry point"

  4. Оба работают параллельно. Коммитят в свои ветки.

  5. Посмотри git worktree list — увидишь оба чекаута.

  6. Удали когда закончишь:

    git worktree remove ../experiment-a
    git worktree remove ../experiment-b

Что дальше

Следующий урок: .claude/rules/ с path-scoping. Модульные правила которые загружаются только когда Claude трогает нужные файлы. Решение проблемы раздутого CLAUDE.md.