รัน 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-neutral —
git 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 worktrees | switch branch (โฟลเดอร์เดียว) | |
|---|---|---|
| รันหลาย session พร้อมกัน | ✅ ได้ | ❌ ตีกัน |
| isolation | เต็ม (คนละ working dir) | ไม่มี (แชร์ working tree) |
| disk | เปลือง (checkout ซ้ำหลายชุด) | ประหยัด |
| ความเร็วเริ่ม | ช้ากว่า (สร้าง worktree) | เร็ว (แค่ checkout) |
| memory/context ของ agent | namespace ใหม่ (ว่าง) เพราะ 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 addbranch ที่ถูก worktree อื่นถืออยู่ = git ปฏิเสธ (“already checked out”). ต้องremoveworktree นั้นก่อน หรือใช้ 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 branch → “แยก branch เฉยๆ” ไม่ทำให้ขนานได้
- git worktree = แต่ละ session มีโฟลเดอร์+branch ของตัวเอง (แชร์
.git) → ขนานจริง ไม่ชน - เลือก: ขนานจริง→worktree · ทีละอย่าง→switch branch
- worktree = path ใหม่ → memory ของ agent เป็นกองใหม่ → durable knowledge อยู่ในไฟล์ในเรพ
รู้จัก worktree ให้ดี = ปลดล็อกการทำงานกับ agent หลายตัวแบบไม่ปวดหัว 🚀

