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

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

เราเล่าจากการทดลองจริงในแล็บ ไม่ใช่ทฤษฎี — และให้หลักฐานพูดแทน
จุดเจ็บ: เครื่องมือดี ๆ มีเยอะ แต่ตั้งค่าครั้งแรกยาก คนส่วนใหญ่ติดตรงเริ่มไม่ถูก
เดิมพัน: เสียเวลาเป็นวันกับการตั้งค่าผิด ๆ ทั้งที่ทำให้ถูกตั้งแต่แรกได้
สิ่งที่เราทำในแล็บ: หลาย Project บน Server เดียว ทีมหลายคน clone แยก กิน Disk มหาศาล → ใช้ Bare Repo + Worktree แชร์ .git เดียว ประหยัด Disk ~80% + wt helper script ทีมสร้าง worktree ได้ใน 30 วินาที
Bare Repo + Worktree + GitLab CE — ระบบจัดการ Multi-Project ที่ประหยัด Disk 80% และทีมทำงานพร้อมกันได้ทันที
อัปเดตล่าสุด: 2026-04-06
.git เดียว สร้าง working copy แยกต่อคน — ประหยัด Disk ~80%wt + เชื่อม GitLab CI/CDลองนึกภาพ 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 ที่ใช้กันทุกวันมีปัญหาพื้นฐานเมื่อใช้บน Server ที่ทีมหลายคนเข้ามาทำงานพร้อมกัน — ทุก clone จะ copy ทั้ง .git directory (ประวัติทั้งหมด) และ working files มาทั้งชุด
ถ้ามี 10 Projects แต่ละตัว .git ขนาด 500MB + working files 200MB:
10 Projects × 5 คน × 700MB
= ~35 GB
ทุกคนมี .git ซ้ำกันหมด
10 Bare Repos × 500MB + Worktrees × 200MB
= ~7 GB
แชร์ .git เดียว ประหยัด ~80%
ปัญหาไม่ได้มีแค่ Disk — เมื่อทุกคน clone แยก ไม่มีใครรู้ว่าใครทำอะไรอยู่ branch ไหน จนกว่าจะ push ขึ้นไปแล้วพบว่า conflict
Git Worktree (ฟีเจอร์ที่มีมากับ Git เลย ไม่ต้องลงเพิ่ม) แก้ปัญหานี้ได้ตรงจุด — แชร์ .git เดียว แต่แยก working directory ต่อคน
ก่อนลงมือ setup ต้องเข้าใจ 2 concept ง่ายๆ ก่อน — Bare Repo คือ Git repository ที่เก็บแค่ข้อมูล .git ไม่มี working files และ Worktree คือ working copy ที่เชื่อมกับ Bare Repo เดียวกัน
เก็บ commit history, branches, tags ทั้งหมดไว้ที่เดียว — เปรียบเหมือน "คลังเอกสารกลาง" ทุกคนอ้างอิงจากที่นี่
ไฟล์จริงที่เปิดแก้ใน Cursor/VS Code — แต่ละคนมี worktree ของตัวเอง ไม่กระทบคนอื่น
ทุก Worktree ชี้กลับไปที่ Bare Repo เดียวกัน — commit, branch, tag เห็นพร้อมกันหมด
แต่ละ Worktree ทำงานคนละ branch — จะแก้อะไรก็ได้ไม่ชนคนอื่น merge ทีหลังผ่าน GitLab
Worktree ไม่ใช่ feature ใหม่ — มีมาตั้งแต่ Git 2.5 (2015) แต่หลายทีมไม่รู้ว่ามี เพราะ clone แยกมันง่ายกว่า จนกว่า Disk จะเริ่มเต็ม
วิธีคิดง่ายๆ — ถ้า Bare Repo เป็น "ห้องสมุดกลาง" แต่ละ 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/
| ชั้น | ที่อยู่ | หน้าที่ |
|---|---|---|
| /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 ใช้ได้ทันที
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
แต่ละคนในทีมมี 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
ทดลองสร้าง 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 นี้ → ทำงานได้เลย
สร้าง 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 ทำงานได้ทันที
โครงสร้างหิน Hoodoo ที่ธรรมชาติแกะสลักมาหลายล้านปี — ระบบที่ดีก็เหมือนกัน ต้องออกแบบโครงสร้างให้มั่นคง
แทนที่จะให้ทุกคนจำ 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 |
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 จบ
Worktree เป็น "โต๊ะทำงาน" ส่วน GitLab เป็น "สำนักงานใหญ่" — ทั้งสองเสริมกัน ไม่ได้ทดแทนกัน Worktree ใช้เขียน code ส่วน GitLab ใช้ review, test, deploy อัตโนมัติ
เขียน code, commit, push — เป็นที่ที่นั่งทำงานจริง
Code review, CI/CD pipeline, Security scan, Deploy อัตโนมัติ
Merge Request, Pipeline status, Issue board, Audit log
Push แล้วรอ review — ไม่ต้องกังวลว่า code จะชนคนอื่น
| ขั้นตอน | ทำที่ไหน | ใครทำ |
|---|---|---|
| 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) | ทีม |
ตัวเลขนี้ประมาณจากกรณีทั่วไป — Project มี .git ขนาด ~500MB (repo ที่มีประวัติ 1-2 ปี) working files ~200MB
วิธีคิด: Clone แยก = ทุกคน copy .git ซ้ำ (10 × 5 × 500MB = 25GB เฉพาะ .git) ส่วน Worktree = .git เก็บแค่ 10 ชุด (10 × 500MB = 5GB) + working files แค่ที่เปิดใช้ (~10 worktrees × 200MB = 2GB)
ยิ่งทีมใหญ่ ยิ่ง project เยอะ — Worktree ยิ่งประหยัดมากขึ้นแบบทวีคูณ
ข้อดีที่ซ่อนอยู่ของ 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
Branch คือ "ชื่อ" ที่ชี้ไปที่ commit ส่วน Worktree คือ "folder จริง" ที่มี working files ของ branch นั้น — ปกติ Git มี 1 worktree (ตัว repo เอง) แต่ git worktree add สร้างเพิ่มได้ ทำให้เปิดหลาย branch พร้อมกันในคนละ folder
ได้ แต่ไม่แนะนำ — Worktree เดียวกันไม่สามารถ checkout branch เดียวกันซ้ำ แต่ถ้าคนละ Worktree ก็ checkout branch เดียวกันได้ เพียงแต่ต้องระวัง conflict ตอน push เหมือนกับ clone ปกติ ทางที่ดีคือแยก branch ต่อคนแล้ว merge ผ่าน GitLab
ได้ git worktree add ใช้ได้กับ repo ปกติเหมือนกัน แต่ Bare Repo เหมาะกว่าเมื่อเป็น "ศูนย์กลาง" ที่ไม่มีใครแก้ไฟล์โดยตรง — ลดโอกาสที่จะเผลอ commit ใน repo กลาง และประหยัด Disk เพราะไม่มี working files ที่ไม่จำเป็น
รองรับ 100% — Cursor/VS Code เปิด folder ที่เป็น Worktree ได้เหมือน folder ปกติ ใช้ Git extension, terminal, AI ได้ทุกอย่าง ไม่ต้องตั้งค่าเพิ่ม
ไม่ต้องเปลี่ยนอะไร — push จาก Worktree ไปที่ GitLab เหมือน push จาก repo ปกติทุกประการ GitLab CI/CD pipeline ทำงานตาม .gitlab-ci.yml เหมือนเดิม Worktree แค่เปลี่ยนที่ทำงานบน local ไม่ได้เปลี่ยนการทำงานของ Git remote
ลองกับ 1 project ก่อน — พอทีมคุ้นเคยแล้ว ค่อยขยายเป็นระบบเต็มรูปแบบ
Bare Repo + wt Script + GitLab CI/CD = ทีมทำงานพร้อมกัน ไม่ชนกัน ประหยัด Disk 80%
สิ่งที่ได้ และหลักคิด
ของจริงที่เอาไปใช้ต่อได้ ไม่ใช่แค่ไอเดีย หลักคิดของเราคือทำให้เป็นระบบที่ทำซ้ำได้และไม่พึ่งความจำคน
อยากเห็นระบบแบบนี้ทำงานกับงานของคุณ — ดู ViberQC และลงชื่อรอรอบทดลองที่ hilogiclabs.com
สมัครสมาชิก Hi Logic Labs เพื่อเข้าถึง Content, Template และ Community คุณภาพสูง
สมัครสมาชิก
Blueprint สำหรับทีม Viber — AI สร้าง ทดสอบ และ Optimize โฆษณาอัตโนมัติ 6 Platforms ด้วย 9 AI Agents + Thompson Sampling เริ่มต้น ฿990/เดือน

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