Раскрытие темы начнём с git и подходов к работе с проектом.
Когда работаем с агентами в несколько потоков с одним проектом - вариантов организовать это всего два.
1️⃣ Первый - ограниченный. Мы можем делить работу между агентами "по территориальному признаку", чтобы не пересекались. Например, один обновляет документацию, другой правит код. Но есть шансы что будут накладки - при правке кода очевидно надо будет обновить документацию. А одновременная правка одинаковых файлов обычно хорошим не кончается. В общем - вариант для простых очевидных случаев, применять аккуратно.
2️⃣ Второй вариант - делать все "по науке" и использовать git, который как раз для таких вещей и придумывали. В нем есть инструмент worktree, он похож на обычный чекаут репозитория, но полученный чекаут (называется рабочее дерево - worktree) оптимизирован и использует локальный репозиторий. Для нас это не существенные детали "под капотом", и с точки зрения функциональности мы просто получаем обычную ветку (branch) в отдельной папке нашего локального компьютера.
❓ Какая минимальная стратегия использования веток (branching strategy) - для локальной разработки простого проекта? У нас есть основная ветка "main". При необходимости сделать какие то изменения в репозитории мы образуем от main отдельную ветку - она будет нашей фича-веткой. Порядок работы простой - делаем изменения, коммитим по ходу работы.
Я работаю с GitHub, поэтому использую его фичи, с прицелом на универсальный флоу, в том числе для фоновых удалённых агентов (remote agents) типа Jules/Codex Cloud. При создании ветки я делаю Draft PR в main, и там собираю все коммиты ветки. Теперь прогресс по плану будет виден и на гитхабе.
❓ Где располагать локально worktree? Я пробовал внутри папки проекта. Я пробовал "сбоку" папки проекта (Типа, проекты в /Documents/Projects/(project), а Worktree расположено в /Document/Projects/Worktrees/(worktree)).
В общем, без разницы - если вы будете вести изменения БЕЗ СМЕНЫ папки агента на папку worktree, то даже весьма внимательный кодекс ВСЕГДА, даже для небольших рефакторингов, ошибается папкой и меняет файлы в основной ветке вместо worktree.
Это когда он просто меняет основной репозиторий, "по привычке", видимо. В итоге имеем на main ненужные нам изменения.
🟢 Сейчас у мен папка
worktrees/ - это "соседняя" папка с папкой проектов.Все лежит в .../_Projects/ и далее:
* worktrees/
* (project)/
Расположение папки такое - следствие экспериментов. Думаю, можно выбрать оптимальнее, возможно, внутри проекта - чтобы не мешать другим проектам. Это надо ещё экспериментировать - но от ошибок с путями агентов расположение папки особо не спасает.
‼️ Всегда меняйте папку агента (это с которой он стартует) на сделанное worktree.
▶️ Пока одна сессия агента работает в одном worktree, вы можете таким манером "наплодить" сколько угодно деревьев от основного проекта. Все что нужно будет сделать потом - это merge веток ваших worktree (фичаветок) в главную ветку main.
▶️ Конфликты merge: если с момента создания ветки в вашей основной ветке произошли изменения (а они бы должны происходить, ибо зачем начинать танцы с git Если все линейно?) - при слиянии нужно будет "решить конфликты". Агенты это тоже делают хорошо, просто это отдельная задача.
▶️ Ветки, которые были успешно слиты в main я удаляю - и локально, и удалённо. Чтобы не "засорять" репозиторий лишними ветками.
...