Blog

Codex worktree: samostatná pracovní kopie pro druhý úkol

Markdown

Pracovní kopie Codex CLI 0.155.1: experimentální příznak worktree, zdrojový HEAD, kontrola nové složky, zachování výsledku a bezpečné odstranění.

Přečíst celý článek

Hlavní poznatek

V Codex CLI verze 0.155.1 vytvoříte samostatnou pracovní kopii pro druhý úkol pomocí codex --enable worktrees --worktree. Funkce je experimentální a ve výchozím nastavení vypnutá: pokud jste ji už nepovolili, Codex odmítne spustit --worktree bez --enable worktrees. Kopie se vytvoří z posledního commitu původního projektu (HEAD), bez necommitovaných změn a ve stavu detached HEAD, tedy bez přiřazené pojmenované větve.

Například pomocí Codex CLI právě refaktorujete jeden modul, když se objeví druhý úkol: napsat testy pro jiný modul. Otevřít druhou relaci ve stejné složce je riskantní: snadno se pomíchají změny z prvního a druhého úkolu. Příznak --worktree vytvoří pro druhý úkol samostatnou složku se stejným projektem a první ponechá beze změny.

Praktické zdroje o souběžné práci s agenty: dokumentace Ailoot.

Co vytvoří volba --worktree v Codexu a které soubory zkopíruje?

V terminologii Gitu je worktree další pracovní složka propojená se stejným repozitářem: sdílí historii commitů, ale na disku má vlastní sadu souborů. V Codex CLI 0.155.1 používá příznak --worktree tento mechanismus Gitu ke spuštění nové relace agenta v samostatné složce; složka, ve které už běží první úkol, zůstane beze změny.

Nová pracovní kopie obsahuje soubory z commitu, na který při spuštění ukazuje HEAD původního projektu — tedy z posledního commitu, nikoli z posledního uložení souboru v editoru. Tento příkaz nepřenese necommitované změny ani nové soubory. Uložení v editoru není totéž co commitnutí v Gitu. Pokud jsou v první složce při spuštění druhého úkolu stále necommitované změny, zůstanou pouze v této složce.

Nejde o zálohu celého repozitáře ani o izolaci celého počítače. Je to druhá pracovní složka téhož projektu s přístupem ke stejné větvi a historii commitů. Podobný mechanismus v jiném nástroji popisuje Claude Code a git worktree: souběžné úkoly.

Příprava: verze, důvěryhodnost projektu a commit

Před spuštěním zkontrolujte tři věci. Příkazy spusťte z původní složky projektu.

Nejprve ověřte verzi Codex CLI. Tento návod platí pro verzi 0.155.1; u jiných verzí si chování příznaků ověřte samostatně:

codex --version

Za druhé potřebujete místní projekt Gitu, jehož HEAD ukazuje na existující commit — jinými slovy, repozitář musí obsahovat alespoň jeden commit. Jinak není z čeho kopii vytvořit.

Za třetí musí být zdroj důvěryhodný: pokud je projekt výslovně označen jako nedůvěryhodný, spuštění pomocí --worktree selže ještě před vytvořením kopie. Pokud Codex CLI teprve nastavujete, základní přípravu popisuje Codex (OpenAI): co to je a jak začít.

Předem zkontrolujte seznam existujících pracovních kopií tohoto repozitáře. Po spuštění jej můžete použít ke srovnání:

git worktree list

Samostatné složky pomáhají udržet úkoly oddělené. Praktické zdroje v dokumentaci Ailoot nabízejí užitečný přehled celkového přístupu k práci s agentem.

Postup: spuštění samostatné kopie pro druhý úkol

  1. Povolte experimentální funkci a spusťte relaci se samostatnou kopií

    Příkaz spusťte z původní složky projektu, kde už pracujete na prvním úkolu.

    codex --enable worktrees --worktree
    

    Očekávaný výsledek: Codex vytvoří pracovní kopii projektu z aktuálního HEAD a otevře v ní relaci agenta. Kopie bude ve stavu detached HEAD, bez přiřazené pojmenované větve. Takto tento příznak funguje ve verzi 0.155.1.

  2. V dalším terminálu v původním projektu znovu vypište pracovní kopie

    git worktree list
    

    Očekávaný výsledek: výstup obsahuje další řádek s cestou k nové kopii a označením detached HEAD (nebo větev, pokud je přiřazená). Tento seznam potvrzuje, že Git kopii zaregistroval, ale nepotvrzuje, že agent úkol dokončil. Chcete-li ověřit, že jsou soubory na místě, otevřete složku uvedenou v seznamu a zkontrolujte její obsah.

Jak zkontrolovat výsledek a zachovat práci ve worktree Codexu?

Po dokončení druhého úkolu v nové kopii je třeba výsledek zvlášť uložit a přenést. Příkaz --worktree změny nesloučí do hlavní větve ani výsledek automaticky nepřenese. Kopie zůstává ve stavu detached HEAD, takže samotné vytvoření commitu uvnitř kopie novou větev nevytvoří. Pokud si tyto commity potřebujete zachovat, přiřaďte je k větvi nebo je přeneste do hlavního projektu před odstraněním složky kopie.

Složku kopie nemažte, dokud není výsledek zachovaný. Kontrola, že je pracovní složka čistá, nenahrazuje zachování potřebných commitů: stále k nim nemusí být přiřazena žádná větev.

Pokud současně pracujete na úkolech v různých nástrojích, předem si naplánujte, jak zabránit jejich vzájemnému ovlivňování. Společné práci se dvěma agenty se věnuje Claude Code a Codex společně.

Pokud bylo spuštění přerušeno: kde najít kopii

Spuštění pomocí --worktree může selhat z několika důvodů:

  • funkce nebyla předem povolena a spouštěcí příkaz neobsahuje --enable worktrees: Codex odmítne spustit příznak --worktree;
  • jste ve špatné složce nebo neexistuje žádný commit: pokud aktuální složka není repozitář Gitu nebo ještě neobsahuje žádné commity, není z čeho kopii vytvořit;
  • projekt je výslovně označen jako nedůvěryhodný zdroj: Codex odmítne spustit relaci s --worktree. Nejprve se ujistěte, že jste otevřeli správný projekt. Jeho stav důvěryhodnosti automaticky neměňte.

Pokud se relace nedokázala připojit k nově vytvořené kopii — například kvůli přerušení procesu — pracovní složka se automaticky neodstraní. Nejprve zkontrolujte seznam pracovních kopií a před odstraněním čehokoli se ujistěte, že kopii stále nepoužívá žádná relace Codex CLI:

git worktree list

Otevřete složku a před odstraněním uložte všechny změny, které potřebujete. Kopie může zůstat zachována, i když se relace agenta nedokončila. Pokud kopie existuje, už ji nepotřebujete a máte jistotu, že ji nepoužívá žádná relace, odstraňte ji ručně příkazem git worktree remove z původního repozitáře a uveďte cestu ke složce. Nepřidávejte --force: pokud kopie obsahuje necommitované nebo nesledované soubory, příkaz ji odmítne odstranit. Pokud příkaz odstranění odmítne, zkontrolujte obsah složky a nevypínejte ochranu.

Po aktualizaci Codex CLI znovu ověřte verzi příkazem codex --version a zopakujte kontrolu pomocí git worktree list: experimentální příznaky se mohou mezi verzemi chovat odlišně.

Další zdroje a nástroje: Ailoot.

Další podrobnosti

Časté otázky

Bude druhý worktree obsahovat neuložené nebo necommitnuté úpravy?

Ne. V popsané verzi CLI vychází z commitu HEAD zdrojového repozitáře. Necommitnuté změny a nové soubory zůstávají v původní složce, takže uložení v editoru k přenosu nestačí.

Je bezpečné smazat čistý worktree s odpojeným HEAD?

I čistá složka může obsahovat commity bez pojmenované větve. Nejprve je zachovejte nebo přeneste, ověřte, že worktree nepoužívá žádná relace, a pak použijte běžné odstranění Git worktree bez vynucení přes ochranné kontroly.

Všechny články