Skip to main content

Чаты в Git worktree

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

Плагин Veai позволяет выбрать worktree, в котором начнётся чат, и создать новый worktree, не выходя из чата. Все чаты, в каком бы worktree они ни шли, остаются в одном окне проекта.

Когда это нужно:

  • вы хотите параллельно поручить агентам две независимые задачи на разных ветках;
  • нужно, чтобы агент пробовал рискованные правки не в рабочей ветке;
  • вы просматриваете чужую ветку и не хотите переключать ветку в основном каталоге.

Что нужно​

  • В корне открытого проекта лежит Git-репозиторий. Если его нет, селектора worktree нет.
  • В IDE включён плагин Git (он идёт в составе IDE).
  • Если в проекте несколько Git-репозиториев, в списке показаны worktree только того репозитория, что лежит в корне проекта.

Выбрать worktree для нового чата​

Селектор worktree находится в нижней строке под полем ввода: кнопка с иконкой ветки и именем каталога worktree. При открытии проекта выбран сам проект (основной worktree).

  1. Нажмите на селектор. Откроется список всех worktree репозитория. У каждого справа бледным цветом показана ветка. Если HEAD не привязан к ветке, написано detached. Текущий выбор отмечен.
  2. Выберите нужный worktree.
  3. Напишите первое сообщение. Чат начнётся в выбранном worktree: агент запустится с его каталогом как рабочим, читает и правит файлы только там.

Список worktree над селектором в нижней строке чата

Что важно знать:

  • Выбор влияет только на то, где начнётся следующий чат. Уже открытые чаты не меняются.
  • Выбранный worktree одинаков во всех местах чата проекта: в окне чата и во вкладках редактора.
  • После первого сообщения worktree закрепляется за чатом. Селектор у такого чата показывает его worktree и не открывается. Сменить worktree начатого чата нельзя: откройте новый чат в другом worktree.
  • Список читается при каждом открытии. Worktree, добавленные или удалённые вне плагина (например, командой git worktree add), появятся при следующем открытии списка. Если выбранный worktree исчез, выбирается проект.
note

Выбор worktree не переключает окружение самой IDE. Упоминания @, навигация по коду, инструменты IDE и редактор продолжают работать с проектом, который открыт в окне. Агент работает в выбранном worktree, а чтобы смотреть и править его файлы в редакторе, откройте этот worktree в IDE как проект.

Создать новый worktree​

  1. Откройте список worktree и нажмите последнюю строку New Worktree. Внизу окна чата откроется панель.
  2. Заполните поля:
    • Branch — имя новой ветки или существующая локальная ветка. Список предлагает текущие локальные ветки;
    • From — ветка или коммит, от которых создаётся новая ветка. По умолчанию HEAD. Поле видно только для новой ветки: если вы выбрали существующую, оно скрыто;
    • Directory — каталог нового worktree. Пока вы его не меняли, плагин предлагает каталог рядом с проектом по шаблону <имя проекта>-<ветка>; косая черта в имени ветки заменяется на дефис.
  3. Нажмите Create или Enter в любом поле. Пока идёт создание, показано Creating worktree….

Панель New Worktree с полями Branch, From и Directory

После создания новый worktree выбран в селекторе, панель закрыта, окно проекта то же.

Список worktree после создания: новый worktree отмечен Новый worktree сразу виден в списке worktree IDE без перезапуска, а при открытии его как проекта IDE не спросит о доверии.

Чего не будет:

  • Каталог должен быть пустым или не существовать. Если это файл или в каталоге что-то лежит, плагин не создаёт worktree и пишет: The destination is a file или The destination directory is not empty.
  • Если не заполнена ветка или каталог, плагин попросит их ввести: Enter a branch name, Enter a directory.
  • Если Git вернул ошибку (например, ветка уже занята другим worktree), в панели показан вывод Git, а выбранным остаётся прежний worktree.
  • Несохранённые документы плагин сохраняет перед созданием: ветка начнётся с содержимого на диске.

Cancel закрывает панель без изменений.

Как отличить чат другого worktree​

Если чат идёт не в основном worktree, после его названия в квадратных скобках стоит имя каталога worktree, например Fix login [feature-x]. Так же подписана вкладка редактора. У чатов основного worktree отметки нет.

Чаты любого worktree открываются в окне текущего проекта. Отдельные окна проекта не создаются.

История по worktree​

В окне истории чаты сгруппированы по worktree:

  • одна группа на каждый worktree репозитория, в том числе пустые; первой идёт группа проекта;
  • заголовок группы показывает имя worktree, ветку (или detached) и число чатов. Клик по шеврону или свободному месту группы сворачивает и разворачивает её. Свёрнутое состояние запоминается для проекта;
  • в списке видны чаты всех агентов, у каждого указан агент. Для остановленного агента показываются уже известные чаты без его запуска;
  • у группы есть действие New chat: оно открывает новый чат сразу в этом worktree;
  • поле Search chats ищет по названию и ветке группы (показывает группу целиком) и по названию чата или агента. Если ничего нет, написано No chats match.

Подробнее об истории — в «История и вкладки».

Если worktree удалили​

Worktree удаляют средствами IDE или Git — плагин их не удаляет. Чаты удалённого worktree остаются в истории:

  • группа помечена (removed);
  • чат открывается и показывает сообщения, но новых сообщений не принимает: в нём написано Worktree <имя> was removed.;
  • если агент не может загрузить такую сессию, сообщений не будет, но отметка об удалении останется;
  • у группы нет действия New chat, зато есть Delete worktree chats from history — удаляет все её чаты после подтверждения.

Агент Veai не загружает сессию, у которой не осталось рабочего каталога, поэтому её содержимое иногда не удаётся показать.

Чего плагин не делает​

  • не открывает worktree отдельным проектом или окном;
  • не удаляет, не сливает и не чистит worktree — это делает IDE или Git;
  • не меняет worktree начатого чата;
  • не работает с worktree вложенных репозиториев, кроме репозитория в корне проекта.