Пейджер

🌍 Добрай раніцы! 👋🏻

TL;DR
  • git-worktree позволяет иметь несколько рабочих директорий в одном репозитории с общим .git
  • Команды: `git worktree add ./path -b branch`, `add ./path branch`, `list`, `remove ./path`, `prune`
  • AI-агенты используют разные worktree для параллельной работы над задачами в изолир…
🌍 Добрай раніцы! 👋🏻

Ну что ребятки наступило время "жира" , я стал чутка свободнее, хотя это утверждение сильно натянутое, так как список моих дел и планов как будто бы не имеет конца.
Cегодня спич пойдет про штуку, для которой пост давно лежал у меня в бэклоге полуготовым и нужно вам его отдать, пока он полностью не потерял свою актуальность.

Речь пойдет про git-worktree 🌳

🚀 Мотивация

Тут все просто, я сам не знал этой команды, до того момента пока не стал много кодить при помощи инструментов AI. А так как сейчас и очевидно в будущем, все будет двигаться относительно AI, переоценить важность понимания данной команды сильно сложно.

Что за дерево?

git worktree это набор команд, которые позволяют иметь несколько рабочих директорий (working trees) в рамках одного репозитория.
Каждое дерево (папка) привязано к своей ветке/коммиту, но все они шарят общий .git.

Структура выглядит примерно так:

tg-project/              ← основной worktree (ветка main)
├── .git/                ← настоящий .git, тут вся история
├── src/
└── worktrees/
    ├── fix-bug/         ← worktree №2 (ветка fix-bug)
    │   ├── .git         ← НЕ папка, а файл-указатель на основной .git
    │   └── src/
    └── feature-x/       ← worktree №3 (ветка feature-x)
        ├── .git         ← тоже файл-указатель
        └── src/


B линкованных worktree .git — это файл, а не папка.

А что нам вообще даёт общий .git?

➡️ Один `git fetch` на всех — подтянули origin/main в одном месте, во всех worktree уже актуальная информация.
➡️ Stash тоже общий — можно git stash в одном worktree, а git stash pop сделать в другом.
➡️ Hooks одни на всех — настроили pre-commit, будет работать во всех worktree.

А вот все остальное, что нам нужно для работы у каждого свое: HEAD (текущая позиция), index (staging), рабочие файлы, состояние мержа / cherry-pick / bisect.

И почему это стало актуально?

Сейчас всё больше разработчиков используют AI-агентов (Claude Code, Cursor, Copilot agent) для параллельной работы над задачами. И вот тут начинается битва за быстродействие, у меня обычно открыто 3-7 сессий 🤯:

Флоу +- такой:

🟠 Вы работаете над фичей в основной директории
🟠 Агент параллельно фиксит баг в worktree рядом
🟠 Другой агент пишет тесты в третьем worktree

🔖 Worktree = изоляция. Каждый агент получает свою песочницу, свою ветку, свои файлы. При этом всё в одном репозитории.

➡️ Буквально пара основных команд

1️⃣ Создать новый worktree с новой веткой:
git worktree add ./worktrees/fix-bug -b fix-bug


Это создаст папку ./worktrees/fix-bug с веткой fix-bug на основе текущей ветки. Заходим туда и работаем как обычно.

2️⃣ Можно создать worktree для существующей ветки:
git worktree add ./worktrees/feature-x feature-x


3️⃣ Посмотреть все worktree:
git worktree list


4️⃣Удалить worktree когда закончили:
git worktree remove ./worktrees/fix-bug


5️⃣Почистить мусор (если папку удалили вручную):
git worktree prune


💡 Полезности

➡️ Одна ветка = один worktree. Нельзя открыть одну и ту же ветку в двух worktree одновременно
➡️ .env файлы не копируются автоматически — нужно скопировать руками или автоматизировать, вообще все что в .gitignore, переносится только то, что git трекает.
➡️ node_modules тоже не шарятся — в каждом worktree нужна своя установка пакетов.
➡️ Не забудьте добавить worktrees в .gitignore, чтобы не закоммитить случайно.

🔭 Вывод

Если вы до сих пор используете stash и(или) clone для переключения между задачами, прекращайте так делатaть, worktree это сейчас must have.

💬 Делитесь своим мнением в комментариях👇!

🙌 Если вам понравился пост, не забудьте поставить лайк! 👍

😃 А если еще и пошарите коллегам, вообще песня, почти как котика спасти.

#AI #GIT
Медиа 1
Хотите больше таких постов?
Подпишитесь на канал и читайте продолжение в Telegram.
Подписаться на @ivanchikovitclub Открыть пост в Telegram