รัน AI agent หลายตัวขนานกันด้วย git worktree (vs สลับ branch)

รัน AI agent หลายตัวขนานกันด้วย git worktree (vs สลับ branch)

TL;DR — จะรัน AI agent หลายตัว พร้อมกัน บน repo เดียว “แค่แยก branch” ไม่พอ — เพราะ 1 โฟลเดอร์ = 1 working tree = checkout ได้ทีละ branch → สอง session ในโฟลเดอร์เดียวตีกัน. ทางแก้คือ git worktree (แต่ละ session มีโฟลเดอร์+branch ของตัวเอง). ถ้าไม่ได้ขนานจริง → ใช้ทีละ session สลับ branch ในโฟลเดอร์เดิมก็พอ

🌐 vendor-neutralgit worktree เป็นของ git ล้วนๆ ใช้ได้กับ agent ทุกตัว (Cursor, Copilot, Codex, Antigravity, Claude Code). 🔷 = จุดที่เจาะจง Claude Code

ปัญหา: อยากรัน agent หลายตัวพร้อมกัน แต่ตีกัน

สถานการณ์จริง: อยากให้ session A ทำ feature-4 ต่อ ส่วน session B เขียน docs/แก้บั๊กอื่น — พร้อมกัน บน repo เดียว. หลายคนคิดว่า “ก็แค่ให้แต่ละ session อยู่คนละ branch” แต่พอลองจริง ไฟล์กระโดดไปมา, commit ปนกัน, งานหาย

ทำไมตีกัน: 1 โฟลเดอร์ = 1 working tree = 1 branch

git มีกฎพื้นฐาน:

1 โฟลเดอร์ (working tree) checkout ได้ทีละ 1 branch เท่านั้น

สอง session ที่เปิดจาก โฟลเดอร์เดียวกัน ใช้ working tree กองเดียวกัน — พอ session B สั่ง git checkout feature-b ไฟล์ทั้งโฟลเดอร์ก็เปลี่ยน ใต้มือ session A ทันที. “แยก branch” เลย ไม่ได้แยก อะไรเลยถ้ายังอยู่โฟลเดอร์เดียว

git worktree คืออะไร

git worktree ให้คุณ checkout หลาย branch พร้อมกันในหลายโฟลเดอร์ จาก repo เดียว — โดย แชร์ .git (object store) ร่วมกัน แต่แต่ละ worktree มี working dir + branch ของตัวเอง:

# จากใน repo
git worktree add ../app-feature-a feature-a   # โฟลเดอร์ใหม่ บน branch feature-a
git worktree add ../app-docs      docs-update  # อีกโฟลเดอร์ บน branch docs-update
git worktree list                              # ดูว่ามี worktree อะไรบ้าง

ทีนี้ session A เปิดที่ ../app-feature-a, session B เปิดที่ ../app-docsต่างคนต่างโฟลเดอร์ ต่าง branch ไม่ชนกัน รันขนานได้จริง

หัวใจ: เทียบ 2 วิธี

parallel worktreesswitch branch (โฟลเดอร์เดียว)
รันหลาย session พร้อมกัน✅ ได้❌ ตีกัน
isolationเต็ม (คนละ working dir)ไม่มี (แชร์ working tree)
diskเปลือง (checkout ซ้ำหลายชุด)ประหยัด
ความเร็วเริ่มช้ากว่า (สร้าง worktree)เร็ว (แค่ checkout)
memory/context ของ agentnamespace ใหม่ (ว่าง) เพราะ path ต่างคงเดิม (path เดิม)
เหมาะกับงานขนานจริง แยกไม่ให้ชนทำทีละอย่าง สลับไปมา

⚠️ จุดที่คนลืม: worktree = path ใหม่ → agent memory ที่ผูกกับ path จะเป็น กองใหม่ที่ว่าง (อ่านเรื่อง memory ผูก path เต็มๆ). เพราะงั้น ความรู้ที่ต้องใช้ข้าม worktree ต้องอยู่ใน ไฟล์ในเรพ ไม่ใช่ memory

ลงมือ: add / list / remove + cleanup

git worktree add <path> <branch>     # สร้าง worktree บน branch เดิม
git worktree add <path> -b <new>     # สร้าง + แตก branch ใหม่ไปในตัว
git worktree list                    # ดูทั้งหมด + branch ที่แต่ละอันถือ
git worktree remove <path>           # ลบเมื่อเสร็จ (working tree ต้องสะอาด)
git worktree prune                   # เก็บกวาด metadata ของ worktree ที่หายไป

พอเสร็จงานในแต่ละ worktree → ลบทิ้ง (remove) แล้ว branch ค่อย merge ตามปกติ. อย่าปล่อยค้าง

Gotchas (เจอแล้วไม่ต้องเสียเวลา)

  • 1 branch ถูก 1 worktree ถือได้ที่เดียว — จะ checkout/worktree add branch ที่ถูก worktree อื่นถืออยู่ = git ปฏิเสธ (“already checked out”). ต้อง remove worktree นั้นก่อน หรือใช้ branch อื่น
  • ลืมลบ worktree — มันค้างกินที่ + ถือ branch ไว้ทำให้ merge/ลบ branch ไม่ได้. worktree list เช็คเป็นระยะ
  • disk บวม — แต่ละ worktree = checkout เต็มชุด (โดยเฉพาะ monorepo ใหญ่ + node_modules)
  • memory namespace ใหม่ — ดูหัวข้อเทียบด้านบน → พึ่งไฟล์ในเรพ

🔷 Claude Code: ตอนสร้าง session มีปุ่ม “worktree” — ติ๊ก = รันใน .claude/worktrees/<name> (ขนานได้ ไม่ชน session อื่น) แต่ได้ memory namespace ใหม่. ไม่ติ๊ก = เปิดโฟลเดอร์จริง (ได้ memory เดิม แต่ใช้ทีละ session). เลือกตามว่าจะขนานหรือไม่

เลือกยังไง (สรุปเป็น decision)

  • ต้องรัน หลาย session พร้อมกันจริง (แยกไม่ให้ชน) → worktree — ยอมรับ memory ใหม่ + disk
  • ทำ ทีละอย่าง สลับงานไปมา → โฟลเดอร์เดียว สลับ branch — เร็ว, ประหยัด, memory คงเดิม
  • อย่าใช้ “หลาย session โฟลเดอร์เดียว คนละ branch” — มันตีกัน

สรุป

  1. 1 โฟลเดอร์ = 1 branch → “แยก branch เฉยๆ” ไม่ทำให้ขนานได้
  2. git worktree = แต่ละ session มีโฟลเดอร์+branch ของตัวเอง (แชร์ .git) → ขนานจริง ไม่ชน
  3. เลือก: ขนานจริง→worktree · ทีละอย่าง→switch branch
  4. worktree = path ใหม่ → memory ของ agent เป็นกองใหม่ → durable knowledge อยู่ในไฟล์ในเรพ

รู้จัก worktree ให้ดี = ปลดล็อกการทำงานกับ agent หลายตัวแบบไม่ปวดหัว 🚀

Supawut Thomas

Supawut Thomas

Software Developer

มีประสบการณ์พัฒนา Software ระดับ Enterprise มากกว่า 10 ปี ผ่านงานจริงหลากหลายโปรเจกต์องค์กร — เชื่อว่าความรู้ที่ดีที่สุดคือความรู้ที่มาจากประสบการณ์จริง และอยากแบ่งปันสิ่งเหล่านั้นให้เพื่อน Developer ทุกคนได้นำไปพัฒนาตัวเองได้ดีขึ้นในทุกๆ วัน