Git Worktree — ทีมทำงาน Server เดียว ไม่ชนกัน
หลาย Project บน Server เดียว ทีมหลายคน clone แยก กิน Disk มหาศาล → ใช้ Bare Repo + Worktree แชร์ .git เดียว ประหยัด Disk ~80% + wt helper script ทีมสร้าง worktree ได้ใน 30 วินาที

Git Worktree — ทีมทำงาน Server เดียว ไม่ชนกัน
Bare Repo + Worktree + GitLab CE — ระบบจัดการ Multi-Project ที่ประหยัด Disk 80% และทีมทำงานพร้อมกันได้ทันที
อัปเดตล่าสุด: 2026-04-06
สรุปสั้นๆ — อ่านแค่นี้ก็เข้าใจ
- ปัญหา: หลาย Project บน Server เดียว ทีมหลายคน clone แยก → กิน Disk มหาศาล ชนกันบ่อย
- คำตอบ: Git Worktree แชร์
.gitเดียว สร้าง working copy แยกต่อคน — ประหยัด Disk ~80% - วิธีทำ: Bare Repo กลาง + Worktree ต่อ user + Helper Script
wt+ เชื่อม GitLab CI/CD - ผลลัพธ์: ทีมเปิด Cursor แก้ code ได้ทันที ไม่กระทบคนอื่น merge ผ่าน GitLab
Server เดียว หลาย Project — ทำไมถึงวุ่นวาย?
ลองนึกภาพ Server เครื่องหนึ่งมี 10+ Projects วางอยู่ ทีมหลายคนต้อง SSH เข้ามาทำงานพร้อมกัน คนหนึ่งแก้ API อีกคน redesign UI อีกคน migrate database — ทั้งหมดอยู่บน Server ตัวเดียวกัน
ถ้าทุกคน git clone แยก จะเกิดอะไรขึ้น? สมมติ Project แต่ละตัวมี .git ขนาด 500MB — 10 Projects คูณทีมสัก 5 คน = clone 50 ชุด กิน Disk ไป 35 GB เฉพาะ .git อย่างเดียว ยังไม่นับ working files
แต่สิ่งที่แย่กว่า Disk เต็ม คือ คนชนกัน — ทำงานบน branch เดียวกัน commit ทับกัน หรือเผลอแก้ไฟล์ใน folder คนอื่น
Worktree แชร์ .git เดียวกัน — ทุกคนได้ working copy ของตัวเอง โดยไม่ต้อง clone ซ้ำ
ทำไมแค่ git clone ถึงไม่พอ?
git clone ที่ใช้กันทุกวันมีปัญหาพื้นฐานเมื่อใช้บน Server ที่ทีมหลายคนเข้ามาทำงานพร้อมกัน — ทุก clone จะ copy ทั้ง .git directory (ประวัติทั้งหมด) และ working files มาทั้งชุด
ถ้ามี 10 Projects แต่ละตัว .git ขนาด 500MB + working files 200MB:
Clone แยก (วิธีเดิม)
10 Projects × 5 คน × 700MB
= ~35 GB
ทุกคนมี .git ซ้ำกันหมด
Worktree (วิธีใหม่)
10 Bare Repos × 500MB + Worktrees × 200MB
= ~7 GB
แชร์ .git เดียว ประหยัด ~80%
ปัญหาไม่ได้มีแค่ Disk — เมื่อทุกคน clone แยก ไม่มีใครรู้ว่าใครทำอะไรอยู่ branch ไหน จนกว่าจะ push ขึ้นไปแล้วพบว่า conflict
Git Worktree (ฟีเจอร์ที่มีมากับ Git เลย ไม่ต้องลงเพิ่ม) แก้ปัญหานี้ได้ตรงจุด — แชร์ .git เดียว แต่แยก working directory ต่อคน
Bare Repo + Worktree — ทำงานยังไง?
ก่อนลงมือ setup ต้องเข้าใจ 2 concept ง่ายๆ ก่อน — Bare Repo คือ Git repository ที่เก็บแค่ข้อมูล .git ไม่มี working files และ Worktree คือ working copy ที่เชื่อมกับ Bare Repo เดียวกัน
Bare Repo (.git)
เก็บ commit history, branches, tags ทั้งหมดไว้ที่เดียว — เปรียบเหมือน "คลังเอกสารกลาง" ทุกคนอ้างอิงจากที่นี่
Worktree (Working Copy)
ไฟล์จริงที่เปิดแก้ใน Cursor/VS Code — แต่ละคนมี worktree ของตัวเอง ไม่กระทบคนอื่น
แชร์ History
ทุก Worktree ชี้กลับไปที่ Bare Repo เดียวกัน — commit, branch, tag เห็นพร้อมกันหมด
แยก Branch
แต่ละ Worktree ทำงานคนละ branch — จะแก้อะไรก็ได้ไม่ชนคนอื่น merge ทีหลังผ่าน GitLab
Worktree ไม่ใช่ feature ใหม่ — มีมาตั้งแต่ Git 2.5 (2015) แต่หลายทีมไม่รู้ว่ามี เพราะ clone แยกมันง่ายกว่า จนกว่า Disk จะเริ่มเต็ม
วิธีคิดง่ายๆ — ถ้า Bare Repo เป็น "ห้องสมุดกลาง" แต่ละ Worktree ก็เป็น "โต๊ะทำงานส่วนตัว" ที่ยืมหนังสือมาจากห้องสมุดเดียวกัน แก้เสร็จก็คืนกลับ
โครงสร้างระบบ Worktree ควรออกแบบยังไง?
โครงสร้างที่ดีต้องแยก 3 ชั้นชัดเจน — Bare Repos กลาง, Linux Users แยกสิทธิ์, และ Workspaces ต่อคน
/opt/repos/ ← Bare Repos กลาง (เก็บ .git)
├── project-alpha.git/
├── project-beta.git/
├── project-gamma.git/
└── ... (ทุก project)
/home/
├── admin/workspaces/ ← Admin
│ ├── project-alpha--feature-auth/
│ └── project-gamma--fix-deploy/
│
├── dev-a/workspaces/ ← ทีม คนที่ 1
│ ├── project-alpha--add-api/
│ └── project-beta--redesign-ui/
│
├── dev-b/workspaces/ ← ทีม คนที่ 2
│ └── project-gamma--migrate-db/
│
└── dev-c/workspaces/ ← ทีม คนที่ 3
└── project-beta--add-tests/
3 ชั้นทำหน้าที่อะไร?
| ชั้น | ที่อยู่ | หน้าที่ |
|---|---|---|
| /opt/repos/*.git | Bare Repo กลาง | แชร์ .git ให้ทุกคน ประหยัด Disk |
| /home/{user}/ | Linux User | แยกสิทธิ์ ไม่เผลอแก้ไฟล์คนอื่น |
| workspaces/{project}--{branch}/ | Worktree | ที่ทำงานจริง เปิด Cursor ได้เลย |
แยก Linux User ต่อคน = ไม่มีใครเผลอแก้ไฟล์คนอื่น — สิทธิ์ชัด ปลอดภัย ตรวจสอบได้
ตั้งค่ายังไง — เริ่มจากตรงไหน?
ขั้นตอนทั้งหมดใช้เวลาไม่เกิน 30 นาที — สร้าง Bare Repos, ตั้ง permissions, สร้าง workspaces, ติดตั้ง helper script ใช้ได้ทันที
01สร้าง Bare Repos กลาง
Clone ทุก Project จาก GitLab มาเป็น Bare Repo — เก็บแค่ .git data ไม่มี working files
# สร้าง folder กลาง
sudo mkdir -p /opt/repos
sudo chgrp devteam /opt/repos
sudo chmod 2775 /opt/repos # group sticky bit
# Clone เป็น bare repo (ตัวอย่าง 1 project)
sudo git clone --bare https://gitlab.example.com/team/project-alpha.git \
/opt/repos/project-alpha.git
# ตั้ง permissions ให้ทีมเข้าถึงได้
sudo chgrp -R devteam /opt/repos/project-alpha.git
sudo chmod -R g+rwX /opt/repos/project-alpha.git
sudo git -C /opt/repos/project-alpha.git config core.sharedRepository group
02สร้าง Linux Users + Workspaces
แต่ละคนในทีมมี Linux user ของตัวเอง + workspace folder สำหรับเก็บ worktrees
# สร้าง group สำหรับทีม
sudo groupadd devteam
# สร้าง user ทีละคน
sudo useradd -m -g devteam -s /bin/bash dev-a
sudo passwd dev-a
# สร้าง workspaces folder
sudo mkdir -p /home/dev-a/workspaces
sudo chown dev-a:devteam /home/dev-a/workspaces
sudo chmod 750 /home/dev-a/workspaces
03สร้าง Worktree แรก — ทดสอบว่าทำงานได้
ทดลองสร้าง worktree จาก bare repo เพื่อยืนยันว่าระบบพร้อมใช้งาน
# สร้าง worktree (ใน home ของ user)
cd /opt/repos/project-alpha.git
git worktree add /home/dev-a/workspaces/project-alpha--fix-api -b fix-api
# ตรวจว่ามีไฟล์จริง
ls /home/dev-a/workspaces/project-alpha--fix-api/
# เปิด Cursor ที่ folder นี้ → ทำงานได้เลย
04ติดตั้ง Helper Script — ทีมใช้ง่าย
สร้าง wt command ให้ทุกคนสร้าง/ลบ worktree ได้ด้วยคำสั่งเดียว (รายละเอียดด้านล่าง)
# ติดตั้ง script ให้ทุกคนเรียกใช้ได้
sudo cp wt-script.sh /usr/local/bin/wt
sudo chmod +x /usr/local/bin/wt
# ทดสอบ
wt help
ทั้ง 4 ขั้นตอนใช้เวลาทั้งหมดไม่เกิน 30 นาที — หลังจากนี้ทีมทุกคน SSH เข้ามาแล้วใช้ wt new สร้าง worktree ทำงานได้ทันที
Bryce Canyon, Utah
โครงสร้างหิน Hoodoo ที่ธรรมชาติแกะสลักมาหลายล้านปี — ระบบที่ดีก็เหมือนกัน ต้องออกแบบโครงสร้างให้มั่นคง
wt Script ช่วยทีมได้ยังไง?
แทนที่จะให้ทุกคนจำ git worktree add ยาวๆ สร้าง helper script ที่รวมทุก command ไว้ในคำสั่งสั้นๆ — สร้าง worktree, ดูรายการ, ลบเมื่อเสร็จ
คำสั่งที่ทีมใช้ได้
| คำสั่ง | ทำอะไร | ตัวอย่าง |
|---|---|---|
wt new |
สร้าง worktree ใหม่ | wt new project-alpha fix-api |
wt done |
ลบ worktree เมื่อเสร็จ | wt done project-alpha fix-api |
wt list |
ดู worktree ของตัวเอง | wt list |
wt list --all |
Admin ดูของทุกคน | wt list --all |
wt sync |
Fetch latest จาก GitLab | wt sync project-alpha |
wt projects |
ดู Projects ทั้งหมด | wt projects |
wt status |
ดูสถานะ commit/push | wt status |
ตัวอย่าง Flow จริง
wt newwt done# dev-a ได้รับ task: แก้ API timeout ใน project-alpha
wt new project-alpha fix-api-timeout
cd ~/workspaces/project-alpha--fix-api-timeout
# เปิด Cursor ที่ folder นี้ → เขียน code
git add . && git commit -m "fix: API timeout 30s → 60s"
git push origin fix-api-timeout
# สร้าง Merge Request บน GitLab → Admin review → Merge
wt done project-alpha fix-api-timeout
wt done จะเช็คก่อนว่ามี uncommitted changes ไหม — ถ้ามีจะถามยืนยันก่อนลบ ไม่เผลอลบงานที่ยังไม่ commitทีมไม่ต้องจำ git worktree add ยาวๆ — แค่ wt new, wt done จบ
เชื่อม GitLab แล้ว Worktree ทำ CI/CD ได้เลยไหม?
Worktree เป็น "โต๊ะทำงาน" ส่วน GitLab เป็น "สำนักงานใหญ่" — ทั้งสองเสริมกัน ไม่ได้ทดแทนกัน Worktree ใช้เขียน code ส่วน GitLab ใช้ review, test, deploy อัตโนมัติ
Worktree ทำอะไร
เขียน code, commit, push — เป็นที่ที่นั่งทำงานจริง
GitLab ทำอะไร
Code review, CI/CD pipeline, Security scan, Deploy อัตโนมัติ
Admin เห็นอะไร
Merge Request, Pipeline status, Issue board, Audit log
ทีมได้อะไร
Push แล้วรอ review — ไม่ต้องกังวลว่า code จะชนคนอื่น
Flow เต็มรูปแบบ
| ขั้นตอน | ทำที่ไหน | ใครทำ |
|---|---|---|
| 1. สร้าง Issue / มอบหมายงาน | GitLab Issue Board | Admin |
2. wt new project-alpha fix-bug |
Server (SSH) | ทีม |
| 3. เปิด Cursor แก้ code → commit → push | Worktree | ทีม |
| 4. สร้าง Merge Request | GitLab | ทีม |
| 5. CI/CD Pipeline รัน (build, test, SAST) | GitLab | อัตโนมัติ |
| 6. Review code → Approve → Merge | GitLab | Admin |
7. wt done project-alpha fix-bug |
Server (SSH) | ทีม |
Disk ประหยัดได้จริงเท่าไหร่?
ตัวเลขนี้ประมาณจากกรณีทั่วไป — Project มี .git ขนาด ~500MB (repo ที่มีประวัติ 1-2 ปี) working files ~200MB
สมมติ 10 Projects × 5 คน
วิธีคิด: Clone แยก = ทุกคน copy .git ซ้ำ (10 × 5 × 500MB = 25GB เฉพาะ .git) ส่วน Worktree = .git เก็บแค่ 10 ชุด (10 × 500MB = 5GB) + working files แค่ที่เปิดใช้ (~10 worktrees × 200MB = 2GB)
ยิ่งทีมใหญ่ ยิ่ง project เยอะ — Worktree ยิ่งประหยัดมากขึ้นแบบทวีคูณ
Worktree เปลี่ยนวิธีคิดเรื่อง Branch ยังไง?
ข้อดีที่ซ่อนอยู่ของ Worktree ไม่ใช่แค่ประหยัด Disk — มันเปลี่ยนพฤติกรรมการทำงานของทั้งทีม เมื่อสร้าง branch ใหม่ง่ายเหมือนสร้าง folder ทีมจะเริ่มกล้าทดลองมากขึ้น
เมื่อก่อน ทีมมักจะ commit ทุกอย่างบน branch เดียว เพราะการ switch branch ต้อง stash งาน เสี่ยง conflict แต่พอมี Worktree — อยากทดลอง feature ใหม่? wt new project-alpha experiment-x ได้เลย ไม่กระทบงานที่ทำอยู่
ผลลัพธ์ที่เห็นได้ชัด — Merge Request เล็กลง focus ขึ้น review ง่ายขึ้น merge เร็วขึ้น cycle ทั้งหมดหมุนเร็วขึ้น
Worktree ทำให้ "สร้าง branch ใหม่" กลายเป็นเรื่องปกติเหมือนสร้าง folder — ทีมกล้าทดลองมากขึ้น MR เล็กลง review ง่ายขึ้น
อยากลองทำเลย — เริ่มยังไง?
ไม่ต้องมี script อะไรซับซ้อน — แค่ 3 คำสั่ง Git ที่มีอยู่แล้ว ลองได้เลยบน repo ที่มีอยู่ (เวลาทำ: ~5 นาที)
# 1. สร้าง bare repo จาก repo ที่มีอยู่ (เวลา: ~1 นาที)
git clone --bare https://gitlab.example.com/team/my-project.git my-project.git
# 2. สร้าง worktree แรก (เวลา: ~10 วินาที)
cd my-project.git
git worktree add ../my-project/feature-test -b feature-test
# 3. ทดสอบ — เข้าไปดูว่ามีไฟล์จริง
ls ../my-project/feature-test/
# 4. ทำเสร็จ → ลบ worktree
git worktree remove ../my-project/feature-test
ยังมีอะไรสงสัยไหม?
Worktree กับ Branch ต่างกันยังไง?
Branch คือ "ชื่อ" ที่ชี้ไปที่ commit ส่วน Worktree คือ "folder จริง" ที่มี working files ของ branch นั้น — ปกติ Git มี 1 worktree (ตัว repo เอง) แต่ git worktree add สร้างเพิ่มได้ ทำให้เปิดหลาย branch พร้อมกันในคนละ folder
ถ้าคนในทีมทำงาน branch เดียวกันได้ไหม?
ได้ แต่ไม่แนะนำ — Worktree เดียวกันไม่สามารถ checkout branch เดียวกันซ้ำ แต่ถ้าคนละ Worktree ก็ checkout branch เดียวกันได้ เพียงแต่ต้องระวัง conflict ตอน push เหมือนกับ clone ปกติ ทางที่ดีคือแยก branch ต่อคนแล้ว merge ผ่าน GitLab
Bare Repo จำเป็นไหม? ใช้ repo ปกติแทนได้ไหม?
ได้ git worktree add ใช้ได้กับ repo ปกติเหมือนกัน แต่ Bare Repo เหมาะกว่าเมื่อเป็น "ศูนย์กลาง" ที่ไม่มีใครแก้ไฟล์โดยตรง — ลดโอกาสที่จะเผลอ commit ใน repo กลาง และประหยัด Disk เพราะไม่มี working files ที่ไม่จำเป็น
Worktree รองรับ Cursor AI / VS Code Remote SSH ไหม?
รองรับ 100% — Cursor/VS Code เปิด folder ที่เป็น Worktree ได้เหมือน folder ปกติ ใช้ Git extension, terminal, AI ได้ทุกอย่าง ไม่ต้องตั้งค่าเพิ่ม
ถ้าอยากใช้ GitLab CI/CD ด้วย ต้องเปลี่ยนอะไรไหม?
ไม่ต้องเปลี่ยนอะไร — push จาก Worktree ไปที่ GitLab เหมือน push จาก repo ปกติทุกประการ GitLab CI/CD pipeline ทำงานตาม .gitlab-ci.yml เหมือนเดิม Worktree แค่เปลี่ยนที่ทำงานบน local ไม่ได้เปลี่ยนการทำงานของ Git remote
เริ่มใช้ Git Worktree กับทีมวันนี้
ลองกับ 1 project ก่อน — พอทีมคุ้นเคยแล้ว ค่อยขยายเป็นระบบเต็มรูปแบบ
Bare Repo + wt Script + GitLab CI/CD = ทีมทำงานพร้อมกัน ไม่ชนกัน ประหยัด Disk 80%
ชอบบทความนี้ใช่ไหม?
สมัครสมาชิก Idea2Level เพื่อเข้าถึง Content, Template และ Community คุณภาพสูง
สมัครสมาชิกบทความที่เกี่ยวข้อง
สร้าง idea2logic.com ด้วย AI — เปิดโครงสร้าง 30+ หน้า 40+ API ทั้งระบบ
สร้าง idea2logic.com ทั้งระบบด้วย AI — 30+ หน้า, 40+ API, 14 database tables ค่า server ไม่ถึง 1,000 บาท/เดือน บทความนี้เปิดโครงสร้างทั้งหมดด้วย Interactive Diagram

สร้าง AI Chatbot 77 ฟีเจอร์ ใน 10 สัปดาห์ ได้ยังไง?
เปิดทุกอย่างเบื้องหลังการวางแผน Jigsaw Web Chat — AI chatbot platform สำหรับธุรกิจไทย 77 ฟีเจอร์ 4 Phases ทีม 8 คน ตั้งแต่ tech stack, pricing, team allocation ไม่มีซ่อน

คู่มือ QA/QC สำหรับ SaaS ครบ 10 ขั้นตอน
คู่มือ QA/QC สำหรับ SaaS แบบครบวงจร — 10 ขั้นตอนตั้งแต่วาง standards ก่อนเขียน code จนถึง post-release monitoring พร้อมเครื่องมือที่เริ่มฟรีได้ ตาราง maintenance รายวัน-ปี และ KPI ที่ต้องวัด