Blog

Codex worktree: salinan kerja berasingan untuk tugasan kedua

Markdown

Salinan kerja Codex CLI 0.155.1: bendera worktree eksperimen, HEAD sumber, menyemak folder baharu, mengekalkan hasil dan mengalih keluar dengan selamat.

Baca artikel penuh

Inti pati

Dalam Codex CLI versi 0.155.1, anda boleh membuat salinan kerja berasingan untuk tugasan kedua dengan codex --enable worktrees --worktree. Ciri ini bersifat eksperimen dan dilumpuhkan secara lalai: jika anda belum mengaktifkannya, Codex akan menolak untuk bermula dengan --worktree tanpa --enable worktrees. Salinan itu dibuat daripada komit terkini projek asal (HEAD), tanpa perubahan yang belum dikomit, dalam keadaan detached HEAD—tanpa cabang bernama yang dipautkan.

Contohnya, anda sedang menggunakan Codex CLI untuk memfaktor semula satu modul apabila tugasan kedua muncul: menulis ujian untuk modul lain. Membuka sesi kedua dalam folder yang sama berisiko kerana perubahan daripada tugasan pertama dan kedua mudah bercampur. Bendera --worktree membuat folder berasingan bagi projek yang sama untuk tugasan kedua, tanpa mengubah folder tugasan pertama.

Sumber praktikal tentang bekerja dengan ejen secara selari: dokumentasi Ailoot.

Perkara yang dibuat oleh --worktree dan fail yang dimasukkan ke dalam salinan

Dalam istilah Git, worktree ialah folder kerja tambahan yang dipautkan kepada repositori yang sama: ia berkongsi sejarah komit, tetapi mempunyai set failnya sendiri pada cakera. Dalam Codex CLI 0.155.1, bendera --worktree menggunakan mekanisme Git ini untuk memulakan sesi ejen baharu dalam folder berasingan, tanpa mengubah folder tempat tugasan pertama sedang berjalan.

Salinan kerja baharu mengandungi fail daripada komit yang ditunjukkan oleh HEAD projek asal semasa pelancaran—komit terkini, bukannya kali terakhir anda menyimpan fail dalam editor. Perintah ini tidak memindahkan perubahan yang belum dikomit atau fail baharu. Menyimpan dalam editor tidak sama dengan membuat komit dalam Git. Jika folder pertama masih mempunyai perubahan yang belum dikomit apabila anda melancarkan tugasan kedua, perubahan itu akan kekal dalam folder tersebut sahaja.

Ini bukan sandaran seluruh repositori atau pengasingan seluruh komputer. Ini ialah folder kerja kedua bagi projek yang sama, dengan akses kepada cabang dan sejarah komit yang sama. Untuk mekanisme serupa dalam alat lain, lihat Claude Code dan git worktree: tugasan selari.

Persediaan: versi, kepercayaan projek dan komit

Semak tiga perkara sebelum bermula. Jalankan perintah dari folder projek asal.

Pertama, semak versi Codex CLI. Arahan ini terpakai pada versi 0.155.1; bagi versi lain, semak tingkah laku bendera secara berasingan:

codex --version

Kedua, anda memerlukan projek Git setempat yang HEAD-nya menunjuk kepada komit sedia ada—dengan kata lain, repositori itu mesti mengandungi sekurang-kurangnya satu komit. Jika tidak, tiada apa-apa untuk dijadikan sumber salinan.

Ketiga, sumber itu mestilah dipercayai: jika projek ditandakan secara jelas sebagai sumber yang tidak dipercayai, pelancaran dengan --worktree akan gagal sebelum salinan dibuat. Jika anda baru menyediakan Codex CLI, persediaan asas diterangkan dalam Codex (OpenAI): apa itu dan cara untuk bermula.

Semak senarai salinan kerja sedia ada bagi repositori ini terlebih dahulu. Anda boleh membandingkannya selepas pelancaran:

git worktree list

Folder berasingan membantu memastikan tugasan tidak bercampur. Untuk pendekatan umum bekerja dengan ejen, sumber praktikal dalam dokumentasi Ailoot berguna.

Langkah: mulakan salinan berasingan untuk tugasan kedua

  1. Aktifkan ciri eksperimen dan mulakan sesi dengan salinan berasingan

    Jalankan perintah dari folder projek asal, tempat anda sudah mengerjakan tugasan pertama.

    codex --enable worktrees --worktree
    

    Hasil yang dijangka: Codex membuat salinan kerja baharu projek daripada HEAD semasa dan membuka sesi ejen di situ. Salinan itu berada dalam keadaan detached HEAD, tanpa cabang bernama yang dipautkan. Begitulah cara bendera ini berfungsi dalam versi 0.155.1.

  2. Senaraikan semula salinan kerja dalam terminal lain di projek asal

    git worktree list
    

    Hasil yang dijangka: output mengandungi satu baris tambahan dengan laluan salinan baharu dan penanda detached HEAD (atau cabang, jika ada). Senarai ini menunjukkan bahawa Git telah mendaftarkan salinan itu, tetapi tidak mengesahkan bahawa ejen telah menyelesaikan tugasan. Untuk memastikan fail berada di situ, buka folder pada laluan yang disenaraikan dan semak kandungannya.

Cara menyemak hasil dan mengekalkan kerja anda

Selepas tugasan kedua dalam salinan baharu selesai, anda perlu menyimpan dan memindahkan hasilnya secara berasingan. Perintah --worktree tidak menggabungkan perubahan ke dalam cabang utama atau memindahkan hasil secara automatik. Salinan itu kekal dalam keadaan detached HEAD, jadi membuat komit di dalamnya tidak dengan sendirinya menghasilkan cabang baharu. Jika anda perlu mengekalkan komit tersebut, pautkannya pada cabang atau pindahkannya ke projek utama sebelum memadam folder salinan itu.

Jangan padam folder salinan sebelum hasilnya dikekalkan. Memastikan folder kerja bersih bukan pengganti untuk mengekalkan komit yang anda perlukan: komit tersebut mungkin masih tidak dipautkan pada mana-mana cabang.

Jika anda mengerjakan tugasan dalam alat yang berbeza pada masa yang sama, rancang lebih awal cara mengelakkannya daripada saling mengganggu. Cara bekerja bersama dua ejen diterangkan dalam Claude Code dan Codex bersama-sama.

Jika permulaan terganggu: tempat mencari salinan

Pelancaran dengan --worktree boleh gagal atas beberapa sebab:

  • ciri itu belum diaktifkan dan perintah pelancaran tidak menyertakan --enable worktrees: Codex akan menolak untuk bermula dengan bendera --worktree;
  • anda berada dalam folder yang salah atau tiada komit: jika folder semasa bukan repositori Git atau belum mengandungi sebarang komit, tiada apa-apa untuk dijadikan sumber salinan;
  • projek ditandakan secara jelas sebagai sumber yang tidak dipercayai: Codex akan menolak untuk memulakan sesi dengan --worktree. Pastikan dahulu bahawa anda telah membuka projek yang betul. Jangan ubah status kepercayaannya secara automatik.

Jika sesi tidak berjaya disambungkan kepada salinan yang baru dibuat—contohnya, kerana proses terganggu—folder kerja itu tidak dipadam secara automatik. Semak senarai salinan kerja dahulu dan, sebelum memadam apa-apa, pastikan tiada sesi Codex CLI yang masih menggunakan salinan ini:

git worktree list

Buka folder itu dan simpan sebarang perubahan yang anda perlukan sebelum memadamkannya. Salinan itu mungkin kekal walaupun sesi ejen gagal dimulakan sepenuhnya. Jika salinan itu wujud, tidak lagi diperlukan dan anda pasti tiada sesi sedang menggunakannya, alih keluar secara manual dengan git worktree remove dari repositori asal dengan menyatakan laluan folder tersebut. Jangan tambah --force: jika salinan mengandungi fail yang belum dikomit atau tidak dijejak, perintah itu akan menolak untuk memadamkannya. Jika perintah itu menolak, semak kandungan folder tanpa melumpuhkan perlindungan tersebut.

Selepas mengemas kini Codex CLI, semak semula versi dengan codex --version dan ulangi pemeriksaan menggunakan git worktree list: bendera eksperimen mungkin berkelakuan berbeza antara versi.

Lagi sumber dan alat: Ailoot.

Butiran lanjut

Soalan lazim: Codex worktree: salinan kerja berasingan untuk tugasan kedua | Ailoot

Adakah worktree kedua merangkumi suntingan belum disimpan atau dikomit?

Tidak. Dalam versi CLI diterangkan, ia bermula daripada commit HEAD repositori sumber. Perubahan belum dikomit dan fail baharu kekal dalam folder asal, maka menyimpan fail dalam editor tidak mencukupi untuk memindahkannya.

Adakah worktree detached yang bersih selamat dipadam?

Folder bersih masih boleh mengandungi commit tanpa cabang bernama. Simpan atau pindahkan commit itu dahulu, pastikan tiada sesi menggunakan worktree, kemudian gunakan pembuangan Git worktree biasa tanpa memaksa melepasi pengadang.

Semua artikel