Spolu s Claude Code pripravujete prehľad lokalizácií: práve robíte vyhľadávanie v zozname a práca je zhruba v polovici. Zrazu zistíte, že v uloženej verzii stránky je nesprávny popisok pod nadpisom. Oprava zaberie dve minúty, no chcete ju skontrolovať samostatne, nie popri nedokončenom vyhľadávaní.

Ukážeme si, ako dať druhej úlohe vlastný pracovný priečinok v tom istom repozitári, spustiť v ňom samostatnú reláciu Claude Code a napokon uložiť výsledok tak, aby sa nič nepomiešalo. Druhý priečinok sám osebe prácu neurýchli. Má jediný účel: zabrániť tomu, aby sa obe úlohy miešali v rovnakej sade súborov.

Kedy jeden pracovný priečinok nestačí

Ukážkový projekt locale-guide je stránka v prehliadači so zoznamom lokalizácií. V jeho priečinku práve riešite úlohu A: vyhľadávanie vo vetve feature/search, kde je jedna nedokončená zmena:

git status --short
M app.js

O túto zmenu nemôžete prísť, no za hotový výsledok ju zatiaľ považovať nemožno. Potom sa objaví úloha B, ktorá s vyhľadávaním nesúvisí: opraviť popisok v index.html vo verzii uloženej vo vetve main.

Prvá myšlienka býva otvoriť druhý terminál a spustiť v tom istom priečinku ďalší claude. Rozhovory budú oddelené, súbory však zostanú spoločné. Ak obaja agenti začnú meniť rovnaké miesta, zmeny sa môžu pomiešať. V našom jednoduchom príklade sú popisok a vyhľadávanie zatiaľ v rôznych súboroch, no obe relácie vidia ten istý rozpracovaný projekt. Aj pri prepnutí vetvy treba najprv vyriešiť existujúce zmeny.

Riešením je vyhradiť úlohe B vlastný pracovný priestor. Git na to ponúka ďalší pracovný priečinok toho istého repozitára, worktree. Claude Code má zas prepínač --worktree, ktorý taký priečinok pripraví a rovno v ňom spustí reláciu. Najprv si vysvetlíme princíp, potom prepínač.

Jeden repozitár a tri pracovné priečinky, každý s vlastnou vetvou: main, feature-a a feature-b
Jeden repozitár, viacero pracovných priečinkov a každý má vlastnú vetvu. Názvy na obrázku sú ilustračné; v našom príklade máme dva pracovné priečinky a tri vetvy: main, feature/search a fix/label.

Hneď na úvod: tento postup nie je povinný pre každú úlohu. Ak je pracovný strom čistý a zmena drobná, druhý priečinok prinesie len zbytočnú prácu. Úplne v poriadku je aj striedať úlohy v jednom priečinku.

Vetva, pracovný priečinok a relácia

Tieto tri pojmy sa ľahko pletú, pretože s nimi často pracujete naraz:

Čo je toČo obsahujeKde sa nachádza
vetvaukazovateľ na commit a líniu históriev repozitári, spoločná pre všetky pracovné priečinky
pracovný priečinok (worktree)súbory, s ktorými práve pracujete, a zmeny pripravené na commitna disku, každý priečinok má vlastné
reláciarozhovor s agentom a jeho kontextv Claude Code

A to je aj odpoveď na otázku o druhom termináli: nová relácia oddelí rozhovor, nie súbory. Ak chcete oddeliť súbory, potrebujete druhý pracovný priečinok.

Jeden repozitár, dva pracovné priečinky, každý s vlastnou vetvou a reláciou Claude CodeJeden repozitárlocale-guidevetvafeature/searchrelácia Claude Codeúloha A, vyhľadávanievetvafix/labelrelácia Claude Codeúloha B, popisokPracovný priečinoklocale-guidePracovný priečinoklocale-guide-labelNecommitnuté zmeny zostávajú vo svojom priečinku
História a zoznam vetiev sú spoločné, súbory a relácie sú oddelené

História a vetvy sú spoločné: oba priečinky patria do toho istého repozitára. Spoločné sú predvolene aj nastavenia Gitu, hoci Git podporuje samostatné nastavenia pre worktree. Pracovné súbory a zmeny pripravené na commit má však každý priečinok vlastné. Necommitnuté vyhľadávanie z prvého priečinka sa v druhom samo neobjaví.

Rovnakú vetvu zvyčajne nemožno súčasne otvoriť v dvoch priečinkoch. Git to odmietne a vypíše priečinok, v ktorom sa už používa:

fatal: 'fix/label' is already used by worktree at '/projects/locale-guide-label'

Vyberte východiskový stav

V ukážke už repozitár existuje a obsahuje aspoň jeden commit, lokálnu vetvu main aj vetvu feature/search. Obe zatiaľ ukazujú na ten istý commit a vyhľadávanie existuje len ako necommitnutá zmena. Pozrime sa na východiskový stav tromi príkazmi v hlavnom priečinku:

git status --short        # čo teraz nie je uložené
git branch --show-current # aktuálna vetva hlavného priečinka
git log -1 --oneline main # posledný commit vo vetve main
 M app.js
feature/search
d5ec405 add locale guide page

Na samostatnú opravu popisku použijeme vetvu main: úloha B potrebuje uloženú verziu stránky, nie aktuálny stav vyhľadávania. Ide o lokálnu vetvu main vo vašom počítači. Nemusí sa zhodovať s rovnako pomenovanou vetvou na vzdialenom repozitári a príkaz z neho nič nesťahuje.

Ak druhá úloha potrebuje výsledok prvej, najskôr určte, ktorý uložený commit má použiť, a priečinok vytvorte z neho. Bežný príkaz git worktree add neprenesie necommitnuté zmeny automaticky. Samostatné kopírovanie súborov či ďalšie nástroje na prípravu prostredia sú iné kroky.

Vytvorte druhý pracovný priečinok

V priečinku locale-guide spustite:

git worktree add -b fix/label ../locale-guide-label main

Príkaz čítajte zľava doprava: vytvoriť novú vetvu fix/label, umiestniť pracovný priečinok vedľa na cestu ../locale-guide-label a ako východiskový bod použiť main. Posledný argument určuje základ jednoznačne. Ak ho vynecháte, Git v tomto príkaze použije aktuálny commit HEAD vetvy feature/search, nie však necommitnuté zmeny. V našom príklade obe vetvy ukazujú na rovnaký commit, takže súbory by boli rovnaké. Po commitoch s vyhľadávaním už výber základu ovplyvní výsledok. Git vypíše približne toto:

Preparing worktree (new branch 'fix/label')
HEAD is now at d5ec405 add locale guide page

Teraz skontrolujte výsledok. Prepínač -C povie Gitu, aby spustil príkaz v zadanom priečinku bez toho, aby ste doň museli prejsť:

git worktree list
git -C ../locale-guide-label branch --show-current
git -C ../locale-guide-label status --short

Ukážkový výstup s fiktívnymi cestami. U vás budú iné:

/projects/locale-guide        d5ec405 [feature/search]
/projects/locale-guide-label  d5ec405 [fix/label]

fix/label

Zoznam zobrazuje oba priečinky aj vetvu priradenú ku každému z nich. Hlavný zostal vo vetve feature/search s rozpracovaným vyhľadávaním, nový je vo vetve fix/label. Príkaz status v druhom priečinku nič nevypísal - je čistý, presne to sme chceli.

Ak cestu alebo názov vetvy nemožno použiť, Git to odmietne a vysvetlí dôvod, napríklad already exists alebo is already used by worktree. Skontrolujte zoznam worktree, vetvy a obsah daného priečinka. Môže ísť o vaše predošlé spustenie alebo inú úlohu. Nepridávajte naslepo --force: najprv zistite, čo už existuje a či to potrebujete.

Otvorte druhú úlohu v Claude Code

Otvorte locale-guide-label v samostatnom okne IDE alebo doň prejdite v novom termináli a spustite odtiaľ claude. Nová relácia o úlohe A nič nevie, a to je v poriadku - potrebuje len vlastný kontext:

Očakávaný priečinok: locale-guide-label, vetva: fix/label.
Najprv over skutočný priečinok a vetvu. Ak sa nezhodujú, zastav sa.
Prečítaj index.html.
Zmeň popisok pod nadpisom na "Zoznam lokalizácií: kód, jazyk a krajina".
V súbore nič iné nemeň a ukáž mi zmenu.
Pred prvou zmenou overte priečinok

Skôr než Claude Code zmení súbory, požiadajte ho, aby uviedol pracovný priečinok a aktuálnu vetvu, a odpoveď porovnajte s tým, čo ste zamýšľali. Agent spustený v nesprávnom priečinku pracuje rovnako sebavedomo ako v správnom.

Po zmene spustite v oboch termináloch git status a git diff. V druhom priečinku sa zmenil iba popisok v súbore index.html, v prvom zostala pôvodná zmena v app.js. Samotný výpis status ukáže názvy súborov, no nepotvrdí, že ich obsah zostal zachovaný. Ak chcete presné porovnanie, počas kontroly pozastavte prácu na vyhľadávaní. Hlavný priečinok kontrolujte v jeho termináli; nežiadajte agenta z izolovanej relácie, aby tam prešiel. Stránku otvorte priamo z druhého priečinka, inak uvidíte pôvodný popisok.

Existuje aj kratšia cesta. Príkaz claude --worktree label-fix sám vytvorí pracovný priečinok a spustí v ňom reláciu. Podľa aktuálnej dokumentácie sa priečinok vytvorí v repozitári, v priečinku .claude/worktrees/label-fix/, vetva dostane názov worktree-label-fix a základom bude predvolená vetva vzdialeného repozitára (zvyčajne main), nie váš aktuálny commit. Ak vzdialený repozitár nie je nastavený, základom bude aktuálny lokálny commit. Nie je to teda to isté ako výslovne zadaná vetva main v príkaze vyššie, hoci v jednoduchom projekte býva výsledok často rovnaký. Predvolené správanie sa dá zmeniť nastavením; podrobnosti si overte v dokumentácii svojej verzie.

Prepínač sa hodí, keď vám tento základ vyhovuje a chcete rýchlo vytvoriť samostatné miesto pre úlohu. Nespúšťajte ho v už vytvorenom priečinku, inak vznikne ďalší. Cestu .claude/worktrees/ sa oplatí pridať do súboru .gitignore, inak sa obsah nových priečinkov začne v hlavnom priečinku zobrazovať ako nesledované súbory.

Čo zostáva spoločné

Samostatný priečinok oddeľuje menej vecí, než sa na prvý pohľad zdá:

OddelenéSpoločnéVôbec sa neoddeľuje
pracovné súbory, príprava na commit, aktuálna vetva priečinkahistória, všetky vetvy, nastavenia repozitára, adresa vzdialeného repozitáraporty lokálneho servera, externá databáza, cloudové služby, prístup procesu k zvyšku disku

Najdôležitejší je tretí stĺpec, na ktorý sa často zabúda. Worktree sa týka súborov Gitu, nie izolácie počítača. Dva lokálne servery nemôžu používať rovnaký port a požiadavky z oboch priečinkov zamieria do tej istej externej databázy, ak ju máte nastavenú. Ani kontroly, ktoré Claude Code vykonáva v samostatnom priečinku, z neho neurobia izolované prostredie pre celý systém.

Druhý priečinok dostane súbory zvoleného commitu. Ak sa závislosti a lokálne nastavenia neukladajú do Gitu, prostredie zvyčajne treba pripraviť samostatne; ďalšie nástroje to môžu automatizovať. Súbor .env nekopírujte naslepo: rovnaké prihlasovacie údaje môžu nasmerovať oba procesy na tú istú službu. Náš statický prehľad nepotrebuje server ani tajné údaje - stránku otvoríte ako súbor.

Uložte a preneste výsledok

V priečinku B skontrolujte popisok v prehliadači, pozrite si git diff a commitnite iba potrebný súbor:

git add index.html
git diff --cached
git commit -m "fix: correct locale list label"

Pred commitom sa uistite, že ste pripravili iba požadovanú zmenu. Ak príkaz git diff --cached ukáže aj iné zmeny, najprv ich skontrolujte.

Commit sa uložil do spoločného repozitára a z hlavného priečinka ho už vidíte. Sám sa však nedostal ani do vetvy main, ani do feature/search: zostáva vo vlastnej vetve, kým sa ho nerozhodnete zlúčiť.

Výsledok prenášajte až vtedy, keď je úloha A dokončená alebo aspoň uložená a hlavný priečinok je čistý. Uprostred nedokončeného vyhľadávania neprepínajte na vetvu main; najprv vyriešte rozpracovanú úlohu. Keď je hlavný priečinok čistý:

git checkout main
git merge fix/label
Fast-forward
index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

Tento výstup zodpovedá situácii, keď sa vetva main po vytvorení fix/label nezmenila. Ak Git oznámi konflikt, zastavte sa a vyriešte ho podľa pravidiel zlučovania; tejto samostatnej téme sa venuje článok "Vetvy a zlúčenie v Gite". Po zlúčení stránku znova otvorte: popisok má byť nový a zoznam lokalizácií nezmenený. Vetva feature/search sa tým neaktualizovala. Pred pokračovaním vo vyhľadávaní samostatne rozhodnite, či do nej chcete preniesť opravu z main.

Odstráňte nepotrebný priečinok

Najprv v druhom priečinku ukončite reláciu a všetko, čo ste v ňom spustili. Potom skontrolujte, či v ňom nezostalo niečo potrebné:

git -C ../locale-guide-label status --short --ignored

Zmenené a nové súbory uvidíte hneď; ignorované zobrazí prepínač --ignored. Práve v nich sa často nachádzajú lokálne nastavenia a poznámky. Keď sa uistíte, že výsledok je uložený v správnej vetve, odstráňte priečinok z hlavného:

git worktree remove ../locale-guide-label
git worktree list

Ak priečinok obsahuje zmenené sledované alebo nové neignorované súbory, Git ho zvyčajne odmietne odstrániť:

fatal: '../locale-guide-label' contains modified or untracked files, use --force to delete it

Nevykonávajte pokyn z chybovej správy ako prvý krok. Skontrolujte súbory a potrebné zmeny uložte. Po odstránení môžu byť necommitnuté údaje pomocou Gitu neobnoviteľné. Na odmietnutie ako na úplnú ochranu sa nespoliehajte: ignorované súbory sa môžu odstrániť aj bez prepínača --force, preto sme ich kontrolovali osobitne.

Je tu ešte jeden detail, na ktorom sa dá ľahko pomýliť. Príkaz Gitu odstráni pracovný priečinok, nie však vetvu - fix/label zostane v zozname príkazu git branch. To je užitočné: výsledok sa nestratil. Keď vetvu naozaj nepotrebujete a všetky potrebné zmeny ste zlúčili, odstráňte ju samostatne.

Dialóg v Claude Code funguje inak

Keď ukončíte reláciu spustenú s prepínačom --worktree, Claude Code skontroluje priečinok. Ak v ňom nie sú zmeny ani nové commity a relácia nemá názov, priečinok aj vetvu odstráni bez opýtania. Ak v ňom niečo zostalo, opýta sa, či chcete priečinok ponechať alebo odstrániť. Odstránenie v tomto dialógu zmaže priečinok aj vytvorenú vetvu spolu so všetkým, čo obsahujú. Nie je to to isté ako príkaz Gitu vyššie. Ak chcete výsledok zachovať, vyberte "ponechať" a preneste ho sami.

Neodstraňujte priečinok mimo Gitu, napríklad cez správcu súborov. Repozitár ho bude naďalej považovať za existujúci a v zozname worktree zostane záznam o niečom, čo už neexistuje.

Ako pracovať na druhej úlohe v Claude Code

Celý postup má šesť krokov:

  1. pomenujte druhú úlohu oddelene od prvej a určte, z ktorého uloženého stavu má vychádzať;
  2. vytvorte pracovný priečinok s výslovne určeným základom alebo spustite claude --worktree, ak vám vyhovuje predvolené nastavenie;
  3. pred prvou zmenou overte cestu a vetvu v novom priečinku;
  4. poskytnite relácii kontext iba k tejto úlohe, bez histórie druhej;
  5. skontrolujte zmenu tam, kde ste ju urobili, a uložte výsledok;
  6. rozhodnite, či zmeny zlúčite, a až potom priečinok odstráňte.

Samostatný priečinok nekontroluje kód ani za vás neschvaľuje prácu. Každá úloha vďaka nemu pracuje s vlastnými súbormi. V našom príklade je prínos jasný: popisok sme samostatne opravili a skontrolovali, zatiaľ čo nedokončené vyhľadávanie zostalo v prvom priečinku.

Overte si, čo ste sa naučili

V druhom priečinku nie je necommitnuté vyhľadávanie. Pokazilo sa niečo?
Nie, tak to má byť. Priečinok vznikol z commitu vo vetve main, nie z aktuálnych súborov úlohy A. Necommitnuté zmeny zostávajú vo svojom priečinku.

V jednom priečinku sú otvorené dve relácie. Sú úlohy oddelené?
Oddelené sú rozhovory, súbory sú však spoločné. Zmeny sa môžu pomiešať, ak obe úlohy zasiahnu rovnaké miesta.

Commit vo vetve B je hotový, ale v main popisok nie je.
Tak to má byť: commit zostal vo vlastnej vetve. Ostatné vetvy nemení; na to je potrebné zlúčenie.

Druhý lokálny server sa nedá spustiť na tom istom porte.
Samostatný priečinok porty neoddeľuje. Spustite ho na inom porte.

Git odmietol odstrániť pracovný priečinok.
Prečítajte si dôvod: okrem neuložených súborov môže byť priečinok zamknutý alebo môže ísť o hlavný pracovný priečinok. Potrebné zmeny uložte a skontrolujte stav. Prepínač --force nepridávajte naslepo.

Ak si to chcete vyskúšať, vytvorte samostatný cvičný repozitár s niekoľkými commitmi. Založte dva priečinky, zmeňte text iba v druhom, skontrolujte oba a nepotrebný odstráňte. Nepotrebujete na to žiadne služby ani účty.