git worktree
git worktree: керувати кількома робочими деревами, прикріпленими до одного репозиторію.
Команда git worktree дозволяє розгорнути один Git-репозиторій одразу в кількох директоріях. Кожне таке робоче дерево (worktree) має власні файли та власний HEAD, тож різні гілки можуть бути відкриті поруч — без постійного перемикання туди-сюди в одній директорії.
Всі worktree належать одному репозиторію та спільно використовують базу об'єктів Git і більшість метаданих репозиторію. Тому worktree значно легший за повний другий клон, коли треба просто заглянути в іншу гілку, терміново виправити помилку чи провести швидкий експеримент окремо від поточних файлів.
Типовий сценарій — дати AI-агенту працювати над завданням паралельно з твоєю основною роботою. Агент працює у своїй гілці, розгорнутій в окремій директорії, тож він не залізе у твоє основне робоче дерево, де можна далі писати код руками. По суті, створення worktree схоже на клонування репозиторію в іншу директорію, тільки трохи швидше.
Git worktree vs. повний клон в окремій директорії
Плюси worktree
- Швидше створюється, бо не потрібно копіювати всі дані репозиторію.
- Займає менше місця на диску, бо дані репозиторію спільні для всіх worktree на одному комп'ютері.
- Багато інструментів розробки вже інтегрують worktree, особливо для роботи з AI-агентами.
Мінуси worktree
- Ту саму гілку зазвичай не можна розгорнути одночасно у двох worktree.
- Зміна налаштувань репозиторію чи стягування змін через
git fetchвпливає на всі worktree, прикріплені до цього репозиторію. - Якщо потрібна повністю незалежна пісочниця з окремими віддаленими репозиторіями (англ. remotes) чи налаштуваннями, повний клон зазвичай кращий.
Приклади
Створити новий worktree для наявної гілки release:
git worktree add ../project-release releaseСтворити новий worktree разом із новою гілкою hotfix/login, яка почнеться від main:
git worktree add -b hotfix/login ../project-hotfix mainПоказати список усіх worktree, прикріплених до поточного репозиторію:
git worktree listВидалити worktree, який більше не потрібен:
git worktree remove ../project-hotfix.gitignoregit checkoutgit configgit taggit worktree