Git worktree: nhiều Claude Code agent song song một repo

Chia sẻ bài viết

Mục lục
Git worktree: nhiều Claude Code agent song song một repo

Trả lời nhanh: Git worktree cho phép một repo mở nhiều thư mục làm việc cùng lúc, mỗi thư mục checkout một nhánh riêng: git worktree add ../shop-feature-a feature-a tạo thư mục mới trên nhánh feature-a trong khi thư mục chính vẫn ở main. Với người dùng Claude Code, đây là chìa khóa chạy nhiều agent song song: mỗi agent một worktree một nhánh, làm việc độc lập, không giẫm file nhau, xong việc thì merge từng nhánh về như làm việc nhóm bình thường.

Chạy một agent đã quen rồi, câu hỏi kế tiếp của dân vibe code luôn là: "cho hai ba con chạy cùng lúc được không?" Được, nhưng nếu cả đám cùng sửa một thư mục thì thành thảm họa: con này build trong lúc con kia đổi file, git lẫn lộn tùng phèo. Lời giải có sẵn trong git từ lâu mà ít người biết: worktree. Bài này từ khái niệm đến quy trình vận hành một 'xưởng' nhiều agent trên VPS.

Tóm tắt nhanh
  • Worktree = một repo, nhiều thư mục làm việc; chung lịch sử git, riêng file đang mở
  • Mỗi agent một worktree + một nhánh + một phiên tmux, công thức song song an toàn
  • Không tốn dung lượng gấp đôi phần .git (dùng chung), chỉ tốn phần file làm việc
  • Nhiều worktree cùng build = I/O dồn dập cùng lúc, đúng bài của ổ NVMe queue sâu

Worktree hoạt động thế nào

Bình thường một repo = một thư mục = một nhánh đang checkout; muốn làm nhánh khác phải stash rồi switch, hoặc clone thêm bản nữa (tốn chỗ, hai lịch sử rời nhau). Worktree là đường thứ ba:

cd ~/shop                                   # repo chinh, dang o main
git worktree add ../shop-thanh-toan feature/thanh-toan
git worktree add ../shop-seo -b feature/seo   # -b: tao nhanh moi luon
git worktree list

Giờ có ba thư mục cùng trỏ về một kho .git: lịch sử, commit, stash dùng chung; file đang làm việc riêng biệt hoàn toàn. Commit ở worktree nào nằm trên nhánh của worktree đó, sạch sẽ như ba người ba máy, gọn như một repo.

Công thức nhiều agent song song trên VPS

Mỗi agent nhận một bộ ba worktree + nhánh + phiên tmux:

# viec 1: lam trang thanh toan
tmux new -s thanh-toan
cd ~/shop-thanh-toan && claude    # giao viec roi Ctrl+B D thoat

# viec 2: toi uu SEO, song song, khong dung viec 1
tmux new -s seo
cd ~/shop-seo && claude

Hai agent giờ cày hai việc độc lập: file riêng, nhánh riêng, log riêng. Bạn attach lần lượt từng phiên nghiệm thu, nhánh nào đạt thì merge:

cd ~/shop && git merge feature/thanh-toan && ./deploy.sh

Quy ước đáng theo ngay từ đầu: tên thư mục = tên phiên tmux = đuôi tên nhánh, nhìn đâu cũng biết cái gì thuộc việc gì.

Những điều cần biết trước khi phụ thuộc vào nó

  • Một nhánh chỉ checkout được ở một worktree, git chặn sẵn để khỏi tự bắn vào chân.
  • node_modules không dùng chung: mỗi worktree tự cài (npm ci từng thư mục), tốn thêm dung lượng và một lượt cài, đổi lại cách ly tuyệt đối. Ổ NVMe làm phần này bớt đau hẳn.
  • Port đụng nhau: hai worktree cùng chạy dev server phải khác PORT, ghi quy ước vào CLAUDE.md để agent tự biết (worktree A port 3001, B port 3002...).
  • Dọn dẹp khi xong: git worktree remove ../shop-seo gỡ thư mục, git worktree prune quét xác chết. Đừng rm -rf tay, git còn giữ sổ sách.

Vì sao trò này ăn ổ đĩa - và cấu hình nên có

Ba worktree cùng hoạt động nghĩa là có lúc: ba npm ci cùng bung hàng vạn file, ba build cùng ghi cache, ba agent cùng grep toàn repo. I/O không xếp hàng lịch sự, chúng dồn cục. Ổ SATA queue nông sẽ nghẽn thấy rõ (mọi thứ cùng chậm lại); ổ NVMe với hàng đợi lệnh sâu nuốt kiểu tải này êm. RAM tính đơn giản: mỗi phiên agent + dev server đội chừng 1-1.5 GB, ba việc song song thoải mái trong gói 8 GB. CPU xung cao vẫn là vua vì mỗi tiến trình build/agent phần lớn đơn luồng.

Mẹo nâng cao cho người đã quen

  • Worktree 'trực ban': giữ một worktree luôn ở main sạch để hotfix khẩn, không phải chờ agent nào xong việc.
  • Đặt hết worktree trong một thư mục cha (~/wt/shop-*), backup, dọn dẹp, liếc danh sách một phát thấy hết.
  • Review chéo bằng agent: xong nhánh A, mở phiên mới cho agent khác review diff nhánh A trước khi merge, người quyết vẫn là bạn, nhưng có thêm một vòng soi lỗi miễn phí.

Bộ lệnh vận hành xưởng nhiều worktree

git worktree list                       # xem dang co nhung thu muc lam viec nao
git worktree add ../shop-seo -b feature/seo   # tao worktree + nhanh moi
git worktree remove ../shop-seo         # xoa khi xong viec
git worktree prune                      # don cac ban ghi mo coi sau khi xoa tay thu muc
git branch -d feature/seo               # xoa nhanh sau khi da merge

Ba quy tắc giữ cho xưởng không loạn:

  • Một nhánh chỉ được checkout ở một worktree. Git từ chối nếu bạn thử mở cùng một nhánh ở hai chỗ, và đây là tính năng chứ không phải hạn chế.
  • Xóa worktree bằng lệnh, đừng xóa thư mục bằng tay. Xóa tay thì bản ghi vẫn còn, phải chạy git worktree prune mới sạch.
  • Đặt tên thư mục theo tên nhánh. Sau ba ngày với năm worktree, tên kiểu shop-2 là không ai nhớ nổi cái nào đang làm gì.

Những thứ không dùng chung giữa các worktree

ThứDùng chungGhi chú
Lịch sử commit, nhánh, tagCùng một kho .git
StashStash ở worktree này thấy được ở worktree kia
Thư mục thư viện đã càiKhôngMỗi worktree phải cài riêng, đây là chỗ tốn dung lượng và thời gian
Tệp môi trường không theo dõiKhôngTệp .env phải chép sang từng worktree
Bộ nhớ đệm buildKhôngMỗi worktree build riêng, đây là lý do ổ đĩa quan trọng
Cấu hình git cục bộĐặt ở kho chính, mọi worktree dùng chung

Hai dòng giữa là chi phí thật của mô hình này. Ba worktree cho một dự án Node nghĩa là ba thư mục thư viện, mỗi cái vài trăm megabyte tới vài gigabyte. Cách giảm: dùng trình quản lý gói có kho chung theo máy, khi đó các worktree chia sẻ cùng một kho tệp thay vì chép lại.

Kịch bản dựng và dọn worktree

#!/bin/bash
# tao-worktree.sh ten-viec
set -e
TEN=$1
git worktree add "../$(basename $PWD)-$TEN" -b "feature/$TEN"
cd "../$(basename $PWD)-$TEN"
cp ../$(basename $OLDPWD)/.env .env 2>/dev/null || true
npm ci
tmux new -d -s "$TEN" -c "$PWD"
echo "Xong. Vao bang: tmux attach -t $TEN"

Kịch bản này làm đủ bốn việc hay quên: tạo worktree, chép tệp môi trường, cài thư viện, và mở sẵn một phiên làm việc. Khi xong việc thì gộp nhánh về, tmux kill-session -t ten, rồi git worktree remove.

Trước khi chạy nhiều agent cùng lúc

  • Đếm tài nguyên. Mỗi worktree đang build chiếm một phần vi xử lý và bộ nhớ. Máy 4 nhân 8 GB thì hai worktree là hợp lý, ba là bắt đầu tranh nhau. Xem thực tế bằng htop lúc cả hai đang chạy.
  • Tách cổng. Hai máy chủ phát triển cùng chạy cổng 3000 là một cái không lên. Đặt cổng theo tên việc và ghi vào tệp môi trường của từng worktree.
  • Tách cơ sở dữ liệu. Hai nhánh cùng chạy di trú cơ sở dữ liệu trên một kho dữ liệu là hỏng dữ liệu. Mỗi worktree một cơ sở dữ liệu riêng, hoặc ít nhất một lược đồ riêng.
  • Gộp về theo thứ tự. Gộp từng nhánh một, chạy kiểm thử sau mỗi lần gộp. Gộp cả ba cùng lúc rồi mới chạy kiểm thử là mất luôn khả năng biết nhánh nào gây lỗi.

Câu hỏi thường gặp

Worktree khác gì clone repo ra hai thư mục?

Clone đôi = hai kho .git rời: fetch hai lần, nhánh không thấy nhau ngay, tốn chỗ gấp đôi. Worktree chung một kho: commit bên này bên kia thấy liền, stash chung, dung lượng chỉ tốn phần file làm việc.

Chạy mấy agent song song là hợp lý?

Giới hạn thật không phải máy mà là sức nghiệm thu của bạn: 2-3 việc song song là điểm ngọt, đủ nhanh gấp bội, vẫn đủ sức duyệt kỹ từng nhánh. Máy 8 GB RAM + NVMe gánh mức này nhẹ nhàng.

Hai agent sửa trùng một file ở hai worktree thì sao?

Không đụng nhau lúc làm (file riêng), chỉ gặp nhau lúc merge, git báo conflict như làm việc nhóm bình thường, và bạn (hoặc chính agent) giải quyết. Phòng bệnh: chia việc theo khu vực code ngay trong đề bài giao cho từng agent.

Worktree có dùng được với dự án không phải Node không?

Worktree là tính năng git thuần, Python, Go, PHP gì cũng chạy. Chỉ lưu ý phần môi trường riêng từng thư mục (venv, vendor...) tương tự chuyện node_modules.

Hạ tầng NVMe Enterprise của TND
VPS ổ Enterprise U.2 NVMe, CPU xung cao, đặt tại Việt Nam
Xưởng nhiều agent cần nền I/O chịu tải dồn: VPS NVMe của TND với Enterprise U.2 NVMe RAID 10 queue sâu cân ba bốn worktree cùng build, Xeon Platinum xung cao cho từng agent chạy hết nhịp. Gói 8 GB RAM là đủ mở xưởng, bàn giao 5 phút, tmux + worktree sẵn sàng tối nay.
Xem bảng giá VPS NVMe Xeon Platinum

Bài viết liên quan