Blog

Codex worktree: külön munkapéldány egy második feladathoz

Markdown

A Codex CLI 0.155.1 munkapéldánya: kísérleti worktree kapcsoló, forrás-HEAD, az új mappa ellenőrzése, az eredmény megőrzése és biztonságos eltávolítás.

A teljes cikk elolvasása

Legfontosabb tudnivaló

A Codex CLI 0.155.1-es verziójában a codex --enable worktrees --worktree paranccsal hozhat létre külön munkapéldányt egy második feladathoz. A funkció kísérleti, és alapértelmezés szerint ki van kapcsolva: ha még nem engedélyezte, a Codex nem indul el a --worktree kapcsolóval a --enable worktrees nélkül. A másolat az eredeti projekt legutóbbi commitjából (HEAD) készül, nem tartalmaz nem commitolt módosításokat, és detached HEAD állapotban jön létre, hozzárendelt nevű branch nélkül.

Tegyük fel, hogy a Codex CLI-vel egy modult refaktorál, amikor felmerül egy második feladat: teszteket kell írnia egy másik modulhoz. Kockázatos ugyanabban a mappában megnyitni egy második munkamenetet, mert könnyű összekeverni az első és a második feladat módosításait. A --worktree kapcsoló külön mappát hoz létre ugyanahhoz a projekthez a második feladat számára, így az első feladat mappája érintetlen marad.

Gyakorlati források az ügynökökkel való párhuzamos munkához: Ailoot dokumentációja.

Mit hoz létre a --worktree, és mely fájlok kerülnek a másolatba?

A Git szóhasználatában a worktree egy további munkamappa, amely ugyanahhoz a tárolóhoz kapcsolódik: megosztja a commitok előzményeit, de saját, lemezen tárolt fájlkészlete van. A Codex CLI 0.155.1-ben a --worktree kapcsoló ezt a Git-mechanizmust használja arra, hogy új ügynökmunkamenetet indítson külön mappában, miközben az első feladat futásának helyet adó mappa érintetlen marad.

Az új munkapéldány azokat a fájlokat tartalmazza, amelyek abból a commitból származnak, amelyre az eredeti projekt HEAD-je az indításkor mutat — vagyis a legutóbbi commitból, nem abból az állapotból, amikor utoljára mentette a fájlt a szerkesztőben. Ez a parancs nem viszi át a nem commitolt módosításokat és az új fájlokat. A szerkesztőben történő mentés nem ugyanaz, mint a Gitben végzett commit. Ha az első mappában még vannak nem commitolt módosítások a második feladat indításakor, azok csak abban a mappában maradnak meg.

Ez nem a teljes tároló biztonsági másolata, és nem is a teljes számítógép elszigetelése. Ugyanannak a projektnek egy második munkamappája, amely hozzáfér ugyanahhoz a branchhez és commit-előzményhez. Egy másik eszköz hasonló mechanizmusáról lásd: Claude Code és git worktree: párhuzamos feladatok.

Előkészületek: verzió, a projekt megbízhatósága és egy commit

Indítás előtt három dolgot ellenőrizzen. A parancsokat az eredeti projekt mappájából futtassa.

Először ellenőrizze a Codex CLI verzióját. Ezek az utasítások a 0.155.1-es verzióra vonatkoznak; más verzióknál külön ellenőrizze a kapcsolók viselkedését:

codex --version

Másodszor, szüksége van egy helyi Git-projektre, amelynek HEAD-je egy létező commitra mutat — más szóval a tárolónak legalább egy commitot kell tartalmaznia. Ellenkező esetben nincs miből létrehozni a másolatot.

Harmadszor, a forrásnak megbízhatónak kell lennie: ha a projekt kifejezetten nem megbízhatóként van megjelölve, a --worktree kapcsolóval történő indítás még a másolat létrehozása előtt meghiúsul. Ha most állítja be a Codex CLI-t, az alapvető előkészületeket a Codex (OpenAI): mi ez és hogyan kezdjünk hozzá című útmutató ismerteti.

Előzetesen ellenőrizze a tároló meglévő munkapéldányainak listáját. Az indítás után összehasonlításra használhatja:

git worktree list

A külön mappák segítenek elkülöníteni a feladatokat. Az ügynökkel való munkavégzés általános megközelítéséhez hasznosak lehetnek az Ailoot dokumentációjában található gyakorlati források.

Lépések: külön példány indítása egy második feladathoz

  1. Engedélyezze a kísérleti funkciót, és indítson munkamenetet külön példánnyal

    A parancsot az eredeti projekt mappájából futtassa, ahol már az első feladaton dolgozik.

    codex --enable worktrees --worktree
    

    Várható eredmény: a Codex új munkapéldányt hoz létre a projekt aktuális HEAD-jéből, és ügynökmunkamenetet nyit benne. A másolat detached HEAD állapotban van, hozzárendelt nevű branch nélkül. A 0.155.1-es verzióban így működik ez a kapcsoló.

  2. Listázza újra a munkapéldányokat az eredeti projekt egy másik termináljában

    git worktree list
    

    Várható eredmény: a kimenet tartalmaz egy további sort az új másolat elérési útjával és egy detached HEAD jelöléssel (vagy egy branch nevével, ha van ilyen). Ez a lista azt mutatja, hogy a Git regisztrálta a másolatot, de nem igazolja, hogy az ügynök befejezte a feladatot. Annak ellenőrzéséhez, hogy a fájlok ott vannak, nyissa meg a felsorolt elérési út mappáját, és nézze meg a tartalmát.

Az eredmény ellenőrzése és a munka megőrzése

Ha elkészült a második feladattal az új példányban, külön kell mentenie és átvinnie az eredményt. A --worktree parancs nem egyesíti a módosításokat a fő branchbe, és nem viszi át automatikusan az eredményt. A másolat detached HEAD állapotban marad, ezért az ott létrehozott commit önmagában nem hoz létre új branchet. Ha meg akarja őrizni ezeket a commitokat, rendelje őket egy branchhez, vagy vigye át őket a fő projektbe, mielőtt törli a másolat mappáját.

Ne törölje a másolat mappáját, amíg meg nem őrizte az eredményt. Annak ellenőrzése, hogy a munkamappa tiszta-e, nem helyettesíti a szükséges commitok megőrzését: előfordulhat, hogy még egyik branchhez sincsenek hozzárendelve.

Ha egyszerre különböző eszközökben dolgozik feladatokon, előre tervezze meg, hogyan akadályozza meg, hogy azok zavarják egymást. A két ügynökkel végzett közös munka témáját a Claude Code és Codex együtt című útmutató tárgyalja.

Ha az indítás megszakadt: hol találja meg a másolatot?

A --worktree kapcsolóval történő indítás több okból is meghiúsulhat:

  • a funkciót korábban nem engedélyezte, és az indítóparancs nem tartalmazza a --enable worktrees kapcsolót: a Codex nem indul el a --worktree kapcsolóval;
  • rossz mappában van, vagy nincs commit: ha az aktuális mappa nem Git-tároló, vagy még egyetlen commitot sem tartalmaz, nincs miből létrehozni a másolatot;
  • a projekt kifejezetten nem megbízható forrásként van megjelölve: a Codex nem hajlandó --worktree kapcsolóval munkamenetet indítani. Először ellenőrizze, hogy a megfelelő projektet nyitotta-e meg. Ne módosítsa automatikusan a megbízhatósági állapotát.

Ha a munkamenet nem tudott csatlakozni az újonnan létrehozott másolathoz — például mert a folyamat megszakadt —, a munkamappa nem törlődik automatikusan. Először ellenőrizze a munkapéldányok listáját, és bárminek a törlése előtt győződjön meg róla, hogy egyetlen Codex CLI-munkamenet sem használja még ezt a másolatot:

git worktree list

Nyissa meg a mappát, és törlés előtt mentse el a szükséges módosításokat. A másolat akkor is megmaradhat, ha az ügynökmunkamenet indítása nem fejeződött be. Ha a másolat létezik, már nincs rá szükség, és biztosan egyetlen munkamenet sem használja, távolítsa el kézzel az eredeti tárolóból a git worktree remove paranccsal, megadva a mappa elérési útját. Ne adja hozzá a --force kapcsolót: ha a másolat nem commitolt vagy nem követett fájlokat tartalmaz, a parancs nem hajtja végre a törlést. Ha a parancs elutasítja a törlést, ellenőrizze a mappa tartalmát a biztonsági intézkedés kikapcsolása nélkül.

A Codex CLI frissítésekor ellenőrizze újra a codex --version kimenetét, és ismételje meg az ellenőrzést a git worktree list paranccsal: a kísérleti kapcsolók verziónként eltérően viselkedhetnek.

További források és eszközök: Ailoot.

További részletek

Kérdések és válaszok: Codex worktree: külön munkapéldány egy második feladathoz | Ailoot

A második worktree átveszi a nem mentett vagy nem commitolt szerkesztéseimet?

Nem. Az ismertetett CLI-verzió a forrástároló HEAD commitjából indul. A nem commitolt változások és új fájlok az eredeti mappában maradnak, ezért a szerkesztőbeli mentés nem elég az átvitelhez.

Egy tiszta detached worktree biztonságosan törölhető?

Tiszta mappában is lehet név szerinti ág nélküli commit. Előbb őrizze meg vagy vigye át ezeket, ellenőrizze, hogy munkamenet nem használja a worktree-t, majd szokásos Git-worktree eltávolítást használjon az őrök erőltetett megkerülése nélkül.

Összes cikk