บล็อก

Codex worktree: สำเนาสำหรับทำงานแยกต่างหากสำหรับงานที่สอง

Markdown

สำเนาสำหรับทำงานของ Codex CLI 0.155.1: แฟล็ก worktree รุ่นทดลอง, HEAD ต้นทาง, การตรวจสอบโฟลเดอร์ใหม่, การเก็บรักษาผลลัพธ์ และการลบอย่างปลอดภัย

อ่านบทความฉบับเต็ม

ประเด็นสำคัญ

ใน Codex CLI เวอร์ชัน 0.155.1 คุณสร้างสำเนาสำหรับทำงานแยกต่างหากสำหรับงานที่สองได้ด้วย codex --enable worktrees --worktree ฟีเจอร์นี้ยังเป็นรุ่นทดลองและปิดใช้งานไว้เป็นค่าเริ่มต้น: หากคุณยังไม่ได้เปิดใช้งาน Codex จะปฏิเสธการเริ่มทำงานด้วย --worktree หากไม่มี --enable worktrees สำเนาจะถูกสร้างจากคอมมิตล่าสุดของโปรเจกต์ต้นฉบับ (HEAD) โดยไม่มีการเปลี่ยนแปลงที่ยังไม่ได้คอมมิต และอยู่ในสถานะ detached HEAD—โดยไม่มีสาขาที่ระบุชื่อผูกอยู่

ตัวอย่างเช่น คุณกำลังใช้ Codex CLI เพื่อปรับโครงสร้างโมดูลหนึ่ง แล้วมีงานที่สองเข้ามา: เขียนการทดสอบสำหรับอีกโมดูลหนึ่ง การเปิดเซสชันที่สองในโฟลเดอร์เดียวกันมีความเสี่ยง เพราะอาจสับสนระหว่างการเปลี่ยนแปลงของงานแรกกับงานที่สองได้ง่าย แฟล็ก --worktree จะสร้างโฟลเดอร์แยกของโปรเจกต์เดียวกันสำหรับงานที่สอง โดยปล่อยโฟลเดอร์ของงานแรกไว้ตามเดิม

แหล่งข้อมูลเชิงปฏิบัติเกี่ยวกับการทำงานกับเอเจนต์พร้อมกัน: เอกสารประกอบ Ailoot

--worktree สร้างอะไร และมีไฟล์ใดอยู่ในสำเนาบ้าง

ในศัพท์ของ Git worktree คือโฟลเดอร์ทำงานเพิ่มเติมที่เชื่อมโยงกับรีโพซิทอรีเดียวกัน โดยใช้ประวัติคอมมิตร่วมกัน แต่มีชุดไฟล์ของตัวเองบนดิสก์ ใน Codex CLI 0.155.1 แฟล็ก --worktree ใช้กลไกนี้ของ Git เพื่อเริ่มเซสชันเอเจนต์ใหม่ในโฟลเดอร์แยก โดยปล่อยโฟลเดอร์ที่กำลังทำงานชิ้นแรกไว้ตามเดิม

สำเนาสำหรับทำงานใหม่นี้มีไฟล์จากคอมมิตที่ HEAD ของโปรเจกต์ต้นฉบับชี้ไปหาเมื่อเริ่มทำงาน ซึ่งก็คือคอมมิตล่าสุด ไม่ใช่สถานะล่าสุดที่คุณบันทึกไฟล์ในโปรแกรมแก้ไขคำสั่ง การบันทึกในโปรแกรมแก้ไขคำสั่งไม่เหมือนกับการคอมมิตใน Git หากโฟลเดอร์แรกยังมีการเปลี่ยนแปลงที่ไม่ได้คอมมิตเมื่อคุณเริ่มงานที่สอง การเปลี่ยนแปลงเหล่านั้นจะยังอยู่เฉพาะในโฟลเดอร์แรก

นี่ไม่ใช่การสำรองข้อมูลทั้งรีโพซิทอรี หรือการแยกการทำงานของคอมพิวเตอร์ทั้งเครื่อง แต่เป็นโฟลเดอร์ทำงานที่สองของโปรเจกต์เดียวกัน ซึ่งเข้าถึงสาขาและประวัติคอมมิตเดียวกันได้ สำหรับกลไกที่คล้ายกันในเครื่องมืออื่น ดูที่ Claude Code และ git worktree: งานแบบขนาน

การเตรียมตัว: เวอร์ชัน ความน่าเชื่อถือของโปรเจกต์ และคอมมิต

ตรวจสอบสามสิ่งนี้ก่อนเริ่ม เรียกใช้คำสั่งจากโฟลเดอร์ของโปรเจกต์ต้นฉบับ

ข้อแรก ตรวจสอบเวอร์ชัน Codex CLI คำแนะนำเหล่านี้ใช้กับเวอร์ชัน 0.155.1 หากใช้เวอร์ชันอื่น ให้ตรวจสอบการทำงานของแฟล็กแยกต่างหาก:

codex --version

ข้อสอง คุณต้องมีโปรเจกต์ Git ในเครื่องที่ HEAD ชี้ไปยังคอมมิตที่มีอยู่ กล่าวอีกอย่างคือ รีโพซิทอรีต้องมีคอมมิตอย่างน้อยหนึ่งรายการ หากไม่มี ก็ไม่มีต้นทางให้สร้างสำเนา

ข้อสาม ต้นทางต้องเชื่อถือได้: หากโปรเจกต์ถูกระบุไว้อย่างชัดเจนว่าไม่น่าเชื่อถือ การเริ่มทำงานด้วย --worktree จะล้มเหลวก่อนสร้างสำเนา หากคุณเพิ่งตั้งค่า Codex CLI การเตรียมตัวเบื้องต้นอธิบายไว้ใน Codex (OpenAI): คืออะไรและเริ่มต้นใช้งานอย่างไร

ตรวจสอบรายการสำเนาสำหรับทำงานที่มีอยู่ของรีโพซิทอรีนี้ไว้ล่วงหน้า คุณใช้เปรียบเทียบได้หลังจากเริ่มทำงาน:

git worktree list

โฟลเดอร์แยกช่วยให้แยกงานออกจากกันได้ แนวทางโดยรวมสำหรับการทำงานกับเอเจนต์มีแหล่งข้อมูลเชิงปฏิบัติใน เอกสารประกอบ Ailoot

ขั้นตอน: เริ่มสำเนาแยกสำหรับงานที่สอง

  1. เปิดใช้งานฟีเจอร์รุ่นทดลองและเริ่มเซสชันด้วยสำเนาแยก

    เรียกใช้คำสั่งจากโฟลเดอร์โปรเจกต์ต้นฉบับ ซึ่งคุณกำลังทำงานแรกอยู่แล้ว

    codex --enable worktrees --worktree
    

    ผลลัพธ์ที่คาดหวัง: Codex สร้างสำเนาสำหรับทำงานใหม่ของโปรเจกต์จาก HEAD ปัจจุบัน แล้วเปิดเซสชันเอเจนต์ในสำเนานั้น สำเนาอยู่ในสถานะ detached HEAD โดยไม่มีสาขาที่ระบุชื่อผูกอยู่ นี่คือการทำงานของแฟล็กในเวอร์ชัน 0.155.1

  2. แสดงรายการสำเนาสำหรับทำงานอีกครั้งในเทอร์มินัลอีกหน้าต่างหนึ่งของโปรเจกต์ต้นฉบับ

    git worktree list
    

    ผลลัพธ์ที่คาดหวัง: เอาต์พุตมีบรรทัดเพิ่มเติมที่ระบุพาธของสำเนาใหม่และเครื่องหมาย detached HEAD (หรือสาขา หากมี) รายการนี้แสดงว่า Git ลงทะเบียนสำเนาแล้ว แต่ไม่ได้ยืนยันว่าเอเจนต์ทำงานเสร็จแล้ว หากต้องการตรวจสอบว่ามีไฟล์อยู่ ให้เปิดโฟลเดอร์ตามพาธที่แสดงในรายการแล้วตรวจดูเนื้อหา

วิธีตรวจสอบผลลัพธ์และเก็บรักษางานของคุณ

เมื่องานที่สองในสำเนาใหม่เสร็จแล้ว คุณต้องบันทึกและโอนผลลัพธ์แยกต่างหาก คำสั่ง --worktree จะไม่รวมการเปลี่ยนแปลงเข้ากับสาขาหลักหรือโอนผลลัพธ์ให้อัตโนมัติ สำเนายังคงอยู่ในสถานะ detached HEAD ดังนั้นการคอมมิตภายในสำเนาเพียงอย่างเดียวไม่ได้สร้างสาขาใหม่ หากต้องการเก็บคอมมิตเหล่านั้นไว้ ให้ผูกคอมมิตเข้ากับสาขาหรือโอนไปยังโปรเจกต์หลักก่อนลบโฟลเดอร์ของสำเนา

อย่าลบโฟลเดอร์ของสำเนาจนกว่าจะเก็บรักษาผลลัพธ์ไว้แล้ว การตรวจสอบว่าโฟลเดอร์ทำงานสะอาดไม่ได้ทดแทนการเก็บคอมมิตที่คุณต้องการไว้ คอมมิตเหล่านั้นอาจยังไม่มีสาขาผูกอยู่

หากคุณทำงานในเครื่องมือหลายชนิดพร้อมกัน ให้วางแผนล่วงหน้าว่าจะป้องกันไม่ให้งานรบกวนกันอย่างไร อธิบายการทำงานร่วมกันของเอเจนต์สองตัวไว้ใน ใช้ Claude Code และ Codex ร่วมกัน

หากการเริ่มทำงานถูกขัดจังหวะ: จะหาสำเนาได้ที่ไหน

การเริ่มทำงานด้วย --worktree อาจล้มเหลวได้จากหลายสาเหตุ:

  • ยังไม่ได้เปิดใช้งานฟีเจอร์ไว้ก่อน และคำสั่งเริ่มทำงานไม่มี --enable worktrees: Codex จะปฏิเสธการเริ่มทำงานด้วยแฟล็ก --worktree;
  • คุณอยู่ในโฟลเดอร์ผิด หรือไม่มีคอมมิต: หากโฟลเดอร์ปัจจุบันไม่ใช่รีโพซิทอรี Git หรือยังไม่มีคอมมิต ก็ไม่มีต้นทางให้สร้างสำเนา;
  • โปรเจกต์ถูกระบุไว้อย่างชัดเจนว่าเป็นแหล่งที่ไม่น่าเชื่อถือ: Codex จะปฏิเสธการเริ่มเซสชันด้วย --worktree ก่อนอื่น ตรวจสอบว่าคุณเปิดโปรเจกต์ที่ถูกต้อง อย่าเปลี่ยนสถานะความน่าเชื่อถือโดยอัตโนมัติ

หากเซสชันไม่สามารถเชื่อมต่อกับสำเนาที่เพิ่งสร้างได้ เช่น กระบวนการถูกขัดจังหวะ โฟลเดอร์ทำงานจะไม่ถูกลบโดยอัตโนมัติ ขั้นแรกตรวจสอบรายการสำเนาสำหรับทำงาน และก่อนลบสิ่งใด ให้แน่ใจว่าไม่มีเซสชัน Codex CLI กำลังใช้สำเนานี้อยู่:

git worktree list

เปิดโฟลเดอร์และบันทึกการเปลี่ยนแปลงที่ต้องการก่อนลบ สำเนาอาจยังคงอยู่แม้เซสชันเอเจนต์เริ่มต้นไม่สำเร็จ หากสำเนายังอยู่ ไม่จำเป็นต้องใช้อีกต่อไป และแน่ใจว่าไม่มีเซสชันใดกำลังใช้งานอยู่ ให้ลบด้วยตนเองโดยใช้ git worktree remove จากรีโพซิทอรีต้นฉบับ พร้อมระบุพาธของโฟลเดอร์ อย่าเพิ่ม --force: หากสำเนามีไฟล์ที่ยังไม่ได้คอมมิตหรือไฟล์ที่ไม่ได้ติดตาม คำสั่งจะปฏิเสธการลบ หากคำสั่งปฏิเสธ ให้ตรวจดูเนื้อหาในโฟลเดอร์โดยไม่ปิดกลไกป้องกัน

เมื่ออัปเดต Codex CLI ให้ตรวจสอบ codex --version อีกครั้ง และตรวจสอบด้วย git worktree list ซ้ำ แฟล็กรุ่นทดลองอาจทำงานต่างกันระหว่างเวอร์ชัน

แหล่งข้อมูลและเครื่องมือเพิ่มเติม: Ailoot.

รายละเอียดเพิ่มเติม

คำถามที่พบบ่อย

worktree ที่สองรวมไฟล์ยังไม่บันทึกหรือยังไม่ commit หรือไม่?

ไม่รวม ใน CLI รุ่นที่อธิบายเริ่มจาก HEAD ของ repository ต้นทาง การแก้ที่ยังไม่ commit และไฟล์ใหม่ยังอยู่โฟลเดอร์เดิม แค่บันทึกในเอดิเตอร์จึงไม่พอให้ย้ายไปด้วย

detached worktree ที่สะอาดลบได้ปลอดภัยหรือไม่?

โฟลเดอร์สะอาดยังอาจมี commit ที่ไม่มี branch ตั้งชื่อ ต้องเก็บหรือย้าย commit ก่อน ตรวจว่าไม่มีเซสชันใช้อยู่ แล้วลบด้วย Git worktree ตามปกติโดยไม่บังคับข้ามการป้องกัน

บทความทั้งหมด