Worktrees
ใน Codex App worktrees ให้ Codex รันงานอิสระหลายงานในโปรเจกต์เดียวกันโดยไม่กระทบซึ่งกันและกัน สำหรับ Git repositories automations รันบน background worktrees เฉพาะ สำหรับโปรเจกต์ที่ไม่ได้ใช้ version control automations รันตรงในโฟลเดอร์โปรเจกต์
Worktree คืออะไร
Worktrees ทำงานเฉพาะกับโปรเจกต์ที่เป็นส่วนหนึ่งของ Git repository เนื่องจากใช้ Git worktrees เป็นพื้นฐาน
Worktree ให้คุณสร้าง "สำเนาที่สอง" (checkout) ของ repository แต่ละ worktree มีสำเนาของทุกไฟล์ใน repo แต่ทั้งหมดแชร์ metadata เดียวกัน (โฟลเดอร์ .git) ซึ่งทำให้ checkout และทำงานบน branches หลายอันพร้อมกันได้
คำศัพท์
- Local checkout: Repository ที่คุณสร้าง บางครั้งเรียกแค่ว่า Local ใน Codex App
- Worktree: Git worktree ที่สร้างจาก local checkout ใน Codex App
- Handoff: Flow ที่ย้าย thread ระหว่าง Local และ Worktree Codex จัดการ Git operations ที่จำเป็นเพื่อย้ายงานได้อย่างปลอดภัย
ทำไมต้องใช้ worktree
- ทำงานแบบขนานกับ Codex โดยไม่กระทบ Local setup ปัจจุบัน
- คิว background work ขณะที่คุณมุ่งเน้น foreground
- ย้าย thread ไปยัง Local ในภายหลังเมื่อพร้อม inspect, ทดสอบ หรือ collaborate โดยตรง
เริ่มต้นใช้งาน
เลือก Worktree
ใน new thread view เลือก Worktree ใต้ composer เลือก local environment เพื่อรัน setup scripts สำหรับ worktree หากต้องการ
เลือก starting branch
ด้านล่าง composer เลือก Git branch เพื่อเป็นฐานของ worktree ซึ่งอาจเป็น main/master branch, feature branch หรือ branch ปัจจุบันที่มี unstaged local changes
ส่ง prompt
ส่งงานของคุณและ Codex จะสร้าง Git worktree ตาม branch ที่เลือก โดยค่าเริ่มต้น Codex ทำงานใน "detached HEAD"
เลือกว่าจะทำงานต่อที่ไหน
เมื่อพร้อม คุณสามารถทำงานต่อบน worktree โดยตรงหรือ hand thread off ไปยัง local checkout
ทำงานระหว่าง Local และ Worktree
คิดถึง Local เป็น foreground และ Worktree เป็น background Handoff ให้คุณย้าย thread ระหว่างกัน
มีสองเส้นทางทั่วไป:
ตัวเลือกที่ 1: ทำงานบน worktree
หากต้องการอยู่บน worktree กับการเปลี่ยนแปลง ให้แปลง worktree เป็น branch โดยใช้ปุ่ม Create branch here ใน header ของ thread จากนั้น commit การเปลี่ยนแปลง, push branch ไปยัง remote และเปิด PR บน GitHub
ตัวเลือกที่ 2: Hand off thread ไปยัง Local
คลิก Hand off ใน thread header และย้ายไปยัง Local เส้นทางนี้ดีเมื่อต้องการอ่านการเปลี่ยนแปลงใน IDE ปกติ, รัน development server ที่มีอยู่ หรือ validate งานในสภาพแวดล้อมที่ใช้ประจำ
รายละเอียดขั้นสูง
Codex-managed และ permanent worktrees
โดยค่าเริ่มต้น threads ใช้ Codex-managed worktree ซึ่งออกแบบมาให้เบาและใช้แล้วทิ้ง Codex-managed worktree มักอุทิศให้กับ thread เดียว
หากต้องการสภาพแวดล้อมระยะยาว ให้สร้าง permanent worktree จาก three-dot menu บน project ใน sidebar Permanent worktrees ไม่ถูกลบโดยอัตโนมัติ และคุณสามารถเริ่ม threads หลายอันจาก worktree เดิมได้
วิธี Codex จัดการ worktrees
Codex สร้าง worktrees ใน $CODEX_HOME/worktrees starting commit จะเป็น HEAD commit ของ branch ที่เลือกเมื่อเริ่ม thread Worktree จะไม่ถูก checkout เป็น branch แต่จะอยู่ใน detached HEAD state
Copy ignored local files เข้า managed worktrees
หาก repository มี local setup files ที่ถูก ignore และ worktree ใหม่ต้องการ ให้เพิ่มไฟล์ .worktreeinclude ที่ repository root และแสดงรายการ ignored paths ที่ต้องการ copy
ใช้สำหรับไฟล์ที่ Git ตั้งใจ ignore เช่น .env, .env.local หรือ config/secrets.json
ตัวอย่าง .worktreeinclude:
.env
.env.local
config/secrets.json
Codex จะ copy AGENTS.override.md ที่ถูก ignore เข้า managed worktrees โดยอัตโนมัติ ไม่ต้องแสดงรายการใน .worktreeinclude
Branch limitations
หาก Codex สร้าง branch feature/a บน worktree และคุณพยายาม checkout บน local checkout จะได้ error:
fatal: 'feature/a' is already used by worktree at '<WORKTREE_PATH>'
Git ป้องกัน branch เดียวกันจากการ checkout ใน worktrees หลายอันพร้อมกัน
เพื่อแก้ปัญหา ใช้ Handoff เพื่อย้าย thread ไปยัง Local แทนที่จะพยายาม checkout branch เดิมในทั้งสองที่พร้อมกัน
Worktree cleanup
Worktrees อาจใช้พื้นที่ disk จำนวนมาก โดยค่าเริ่มต้น Codex เก็บ Codex-managed worktrees ล่าสุด 15 อัน คุณสามารถเปลี่ยน limit นี้หรือปิดการลบอัตโนมัติใน settings
Codex พยายามหลีกเลี่ยงการลบ worktrees ที่ยังสำคัญ Codex-managed worktrees จะ ไม่ ถูกลบอัตโนมัติหาก:
- conversation ที่ pin ไว้เชื่อมต่อกับมัน
- thread ยังดำเนินอยู่
- เป็น permanent worktree
Codex-managed worktrees จะถูกลบอัตโนมัติเมื่อ:
- คุณ archive thread ที่เกี่ยวข้อง
- Codex ต้องลบ worktrees เก่าเพื่อให้อยู่ใน limit ที่กำหนด
ก่อนลบ Codex-managed worktree Codex จะบันทึก snapshot ของงาน หากเปิด conversation หลังจาก worktree ถูกลบ คุณจะเห็นตัวเลือก restore
คำถามที่พบบ่อย
ฉันสามารถควบคุมว่า worktrees ถูกสร้างที่ไหนได้ไหม?
ยังไม่ได้ในขณะนี้ Codex สร้าง worktrees ใต้ $CODEX_HOME/worktrees
ฉันสามารถย้าย thread ระหว่าง Local และ Worktree ได้ไหม? ได้ ใช้ Hand off ใน thread header Codex จัดการ Git operations ที่จำเป็น
เกิดอะไรขึ้นกับ threads หาก worktree ถูกลบ? Threads สามารถยังอยู่ใน history ได้แม้ว่า worktree directory จะถูกลบ สำหรับ Codex-managed worktrees Codex บันทึก snapshot ก่อนลบและเสนอ restore เมื่อเปิด thread ที่เกี่ยวข้อง Permanent worktrees ไม่ถูกลบโดยอัตโนมัติเมื่อ archive threads