Перейти к содержанию

Git Worktrees

На этой странице

Hermes Agent часто используется в больших, долгоживущих репозиториях. Если вам нужно:

  • Запускать несколько агентов параллельно над одним проектом, или
  • Держать экспериментальные рефакторинги изолированными от основной ветки,

то worktrees Git — это самый безопасный способ дать каждому агенту собственную рабочую копию без дублирования всего репозитория.

На этой странице показано, как объединить worktrees с Hermes, чтобы каждый сеанс имел чистое, изолированное рабочее окружение.

Зачем использовать Worktrees с Hermes?

Hermes считает текущую рабочую директорию корнем проекта:

  • CLI: директория, из которой вы запускаете hermes или hermes chat
  • Мессенджер-шлюзы: директория, заданная в MESSAGING_CWD

Если запускать несколько агентов в одной и той же рабочей копии, их изменения могут мешать друг другу:

  • Один агент может удалить или переписать файлы, которые использует другой.
  • Становится сложнее понять, какие изменения относятся к какому эксперименту.

С worktrees каждый агент получает:

  • Собственную ветку и рабочую директорию
  • Собственную историю Checkpoint Manager для /rollback

См. также: Checkpoints и /rollback.

Быстрый старт: создание Worktree

Из вашего основного репозитория (содержащего .git/) создайте новый worktree для ветки с новой функциональностью:

# Из корня основного репозитория
cd /path/to/your/repo

# Создайте новую ветку и worktree в ../repo-feature
git worktree add ../repo-feature feature/hermes-experiment

Это создаёт:

  • Новую директорию: ../repo-feature
  • Новую ветку: feature/hermes-experiment, развёрнутую в этой директории

Теперь вы можете перейти в новый worktree и запустить там Hermes:

cd ../repo-feature

# Запустить Hermes в worktree
hermes

Hermes будет:

  • Считать ../repo-feature корнем проекта.
  • Использовать эту директорию для файлов контекста, правок кода и инструментов.
  • Использовать отдельную историю чекпоинтов для /rollback, привязанную к этому worktree.

Запуск нескольких агентов параллельно

Вы можете создать несколько worktrees, каждый со своей веткой:

cd /path/to/your/repo

git worktree add ../repo-experiment-a feature/hermes-a
git worktree add ../repo-experiment-b feature/hermes-b

В отдельных терминалах:

# Терминал 1
cd ../repo-experiment-a
hermes

# Терминал 2
cd ../repo-experiment-b
hermes

Каждый процесс Hermes:

  • Работает в своей ветке (feature/hermes-a vs feature/hermes-b).
  • Записывает чекпоинты под разным хешем теневого репозитория (полученным из пути к worktree).
  • Может независимо использовать /rollback, не влияя на другой процесс.

Это особенно полезно, когда:

  • Выполняются массовые рефакторинги.
  • Опробуются разные подходы к одной и той же задаче.
  • Одновременно используются сессии CLI и мессенджер-шлюза с одним вышестоящим репозиторием.

Безопасная очистка Worktrees

Когда эксперимент завершён:

  1. Решите, сохранить работу или отбросить её.
  2. Если хотите сохранить:
  3. Выполните слияние ветки в основную ветку как обычно.
  4. Удалите worktree:
cd /path/to/your/repo

# Удалите директорию worktree и её ссылку
git worktree remove ../repo-feature

Примечания:

  • git worktree remove откажется удалять worktree с незакоммиченными изменениями, если не принудить его.
  • Удаление worktree не удаляет ветку автоматически; ветку можно удалить или оставить обычными командами git branch.
  • Данные чекпоинтов Hermes в ~/.hermes/checkpoints/ не удаляются автоматически при удалении worktree, но они обычно очень малы.

Рекомендации

  • Один worktree на один эксперимент Hermes
  • Создавайте выделенную ветку/worktree для каждого существенного изменения.
  • Это позволяет держать диффы сфокусированными, а PR — небольшими и удобными для ревью.
  • Называйте ветки по имени эксперимента
  • Например, feature/hermes-checkpoints-docs, feature/hermes-refactor-tests.
  • Коммитьте часто
  • Используйте git-коммиты для отметки крупных вех.
  • Используйте чекпоинты и /rollback как страховочную сетку для правок, сделанных инструментами, между коммитами.
  • Избегайте запуска Hermes из корня голого репозитория при использовании worktrees
  • Предпочитайте директории worktrees, чтобы у каждого агента была чёткая область видимости.

Использование hermes -w (автоматический режим Worktree)

У Hermes есть встроенный флаг -w, который автоматически создаёт одноразовый git worktree с собственной веткой. Вам не нужно настраивать worktrees вручную — просто перейдите в репозиторий и выполните:

cd /path/to/your/repo
hermes -w

Hermes:

  • Создаст временный worktree в директории .worktrees/ внутри вашего репозитория.
  • Развернёт изолированную ветку (например, hermes/hermes-<hash>).
  • Запустит полноценную CLI-сессию внутри этого worktree.

Это самый простой способ получить изоляцию через worktree. Можно также совместить с одиночным запросом:

hermes -w -q "Исправить issue #123"

Для параллельной работы агентов откройте несколько терминалов и запустите hermes -w в каждом — каждый вызов автоматически получит свой worktree и ветку.

Собираем всё вместе

  • Используйте git worktrees, чтобы дать каждому сеансу Hermes свою чистую рабочую копию.
  • Используйте ветки, чтобы фиксировать историю ваших экспериментов на высоком уровне.
  • Используйте чекпоинты + /rollback, чтобы восстанавливаться после ошибок внутри каждого worktree.

Эта комбинация даёт вам: