Illustration for the article: Git worktree: viac vecí naraz bez chaosu

Git worktree: viac vecí naraz bez chaosu

Ako pracovať na viacerých vetvách naraz bez prepínania a odkladania zmien. Základné príkazy git worktree, pasce a využitie s AI asistentmi.

Tomáš Renčík4 min read

Stručne: Git worktree vám dovolí mať jeden repozitár vytiahnutý do viacerých priečinkov naraz, každý na inej vetve. Opravu chyby tak spravíte vedľa rozrobenej funkcie bez git stash a prepínania — a pri práci s AI asistentmi môže každý pracovať vo vlastnom priečinku.

Poznáte to: robíte na novej funkcii, máte rozpracované súbory a zrazu príde „nejde prihlásenie, treba to opraviť hneď“. Čo teraz?

Väčšina ľudí urobí jedno z toho:

  • git stash, prepne vetvu, opraví, prepne späť, git stash pop — a dúfa, že sa nič nepomieša,
  • alebo commitne rozpracovaný kód s popisom „wip“.

Existuje lepší spôsob: git worktree.

Čo je worktree

Normálne máte jeden repozitár a jeden pracovný priečinok. Prepnutím vetvy sa súbory v priečinku zmenia.

Worktree vám dovolí mať viac pracovných priečinkov z jedného repozitára, každý na inej vetve. Zdieľajú históriu aj objekty, takže to nezaberá miesto ako nové klonovanie. Ale súbory má každý svoje.

Základné príkazy

Nový priečinok s novou vetvou:

git worktree add ../projekt-oprava -b oprava-prihlasenia main

Tým vznikne priečinok ../projekt-oprava s vetvou oprava-prihlasenia vytvorenou z main. Váš pôvodný priečinok s rozrobenou prácou ostane nedotknutý.

Zoznam všetkých pracovných priečinkov:

git worktree list

Keď je hotovo, priečinok odstránite:

git worktree remove ../projekt-oprava

A ak ste priečinok zmazali ručne, git si to upratá:

git worktree prune

Ako to používam ja

  • Hlavný priečinok ostáva na hlavnej vetve. Z neho vydávam a nasadzujem.
  • Každá väčšia úloha dostane vlastný worktree a vlastnú vetvu.
  • Každý worktree má vlastný vývojový server na inom porte. Takže môžem mať otvorené tri verzie aplikácie naraz a porovnávať ich.

Najväčšiu cenu to má pri práci s AI. Keď na troch úlohách naraz pracujú traja AI asistenti, každý je vo vlastnom priečinku a vzájomne si neprepisujú súbory. Na konci ich vetvy zlúčim a konflikty vyriešim naraz.

Na čo si dať pozor

1. Jedna vetva môže byť len v jednom worktree. Git nedovolí mať tú istú vetvu otvorenú dvakrát — a je to dobre.

2. Závislosti a lokálne dáta nie sú zdieľané. node_modules, lokálna databáza, súbory .env — tie sú v každom priečinku zvlášť. Nový worktree treba doinštalovať a lokálnu databázu si skopírovať, ak ju potrebujete.

3. Neprepínajte vetvu pod bežiacim serverom. Toto platí vždy, nielen pri worktree. Keď vývojový server beží a vy prepnete vetvu, zmiznú mu súbory pod rukami a začne padať na nezmyselných chybách. Worktree tento problém rieši — namiesto prepínania otvoríte nový priečinok.

4. Upratujte. Staré worktree zaberajú miesto na disku (hlavne node_modules). Raz za čas git worktree list a nepotrebné odstráňte. A ak v nich bežia servery, najprv ich zastavte.

Úloha na precvičenie

Vyskúšajte si to na ľubovoľnom svojom projekte:

  1. V hlavnom priečinku rozrobte zmenu v dvoch súboroch a necommitnite ju.
  2. Vytvorte worktree pre „naliehavú opravu“:
    git worktree add ../projekt-oprava -b oprava main
    
  3. V novom priečinku spravte malú zmenu, commitnite ju a zlúčte do main.
  4. Vráťte sa do pôvodného priečinka — vaša rozrobená práca je nedotknutá.
  5. Upratajte: git worktree remove ../projekt-oprava a git branch -d oprava.

Celé to trvá desať minút a odvtedy už git stash nebudete potrebovať tak často.

Časté otázky

Zaberie to veľa miesta? História sa nezdvojuje, zdvojujú sa len súbory pracovného priečinka. Najviac miesta zvyčajne zaberú závislosti, napríklad node_modules.

Môžem worktree presunúť? Áno, cez git worktree move. Nepresúvajte ho ručne v súborovom systéme — git by o ňom stratil prehľad.

Funguje to s editorom? Každý worktree je obyčajný priečinok. Otvoríte ho v editore ako samostatný projekt, pokojne v dvoch oknách naraz.

Čo keď zabudnem, kde mám ktorý worktree? git worktree list vám ukáže všetky, aj s vetvou a posledným commitom.

Kedy worktree netreba

Na malé veci, ktoré trvajú päť minút, stačí obyčajná vetva. Worktree sa oplatí, keď:

  • robíte na viacerých veciach súbežne,
  • potrebujete porovnať dve verzie aplikácie vedľa seba,
  • nechcete riskovať, že sa rozrobená práca pomieša s opravou.

Worktree a práca s AI asistentmi

Kde worktree naozaj ukáže silu, je práca s viacerými AI asistentmi naraz. Každému dám vlastný priečinok, vlastnú vetvu a vlastný port pre vývojový server. Jeden robí mobilné rozhranie, druhý vyhľadávanie, tretí opravu vo faktúrach. Navzájom si neprepisujú súbory a ja každú vetvu skontrolujem samostatne.

Keď sú hotové, zlúčim ich do jednej spoločnej vetvy. Ak sa dve zmeny dotkli toho istého súboru, konflikt riešim raz, na jednom mieste — nie priebežne v chaose jedného priečinka. Bez worktree by takýto spôsob práce nebol možný.

Na záver

Worktree je jeden z tých nástrojov, o ktorých si po týždni poviete „ako som mohol žiť bez toho“. Vyskúšajte si ho na najbližšej oprave — a už sa nebudete báť, že si rozbijete rozrobenú prácu.

Súvisiace články

  • #git
  • #workflow
  • #vetvy
  • #produktivita

More from the blog