Giới thiệu
Gần đây, tôi đã phát hiện ra một phương pháp làm việc có thể là thay đổi lớn nhất giúp tăng cường năng suất mà tôi thực hiện trong nhiều năm. Trong bài viết này, tôi sẽ chia sẻ kinh nghiệm của mình về việc kết hợp Git Worktree và Claude Code để đạt được điều mà tôi chưa bao giờ nghĩ là có thể: làm việc trên nhiều nhiệm vụ lập trình đồng thời mà không bị mất kiểm soát trong việc chuyển đổi ngữ cảnh.
Vấn Đề: Ác Mộng Chuyển Đổi Ngữ Cảnh
Bạn có biết cảm giác đó không? Bạn đang sâu trong công việc với tính năng A, tiến triển rất tốt, thì bỗng nhiên một báo cáo lỗi khẩn cấp xuất hiện. Bạn cần phải:
- Lưu lại thay đổi của bạn hoặc thực hiện một commit vội vàng
- Chuyển nhánh
- Quay lại ngữ cảnh của lỗi
- Sửa lỗi
- Chuyển lại công việc ban đầu
- Cố gắng nhớ mình đã dừng lại ở đâu
Khi bạn quay lại với tính năng A, bạn đã mất đi ngữ cảnh và đà tiến quý giá. Tôi đã phải thực hiện điều này nhiều lần trong một ngày, và nó đã giết chết năng suất của tôi.
Giải Pháp Của Tôi: Git Worktree + Claude Code
Tóm lại: Tôi tạo một Git Worktree riêng cho mỗi ticket và bắt đầu một phiên Claude Code riêng trong từng worktree bằng cách sử dụng nhiều cửa sổ iTerm2.
Phân Tích Quy Trình Làm Việc:
- Tạo một worktree cho mỗi ticket/nhiệm vụ
- Mở nhiều cửa sổ iTerm2
- Bắt đầu phiên Claude Code trong từng cửa sổ
- Làm việc trên nhiều nhiệm vụ đồng thời
Tại Sao Chọn Git Worktree?
Đối với những ai chưa quen, Git Worktree cho phép bạn có nhiều thư mục làm việc cho cùng một kho lưu trữ, mỗi thư mục được kiểm tra ở các nhánh khác nhau. Hãy tưởng tượng rằng bạn có nhiều bản sao của dự án của mình, nhưng tất cả đều chia sẻ cùng một lịch sử Git.
Cách Thiết Lập:
bash
# Tạo một worktree mới cho nhánh tính năng
git worktree add ../myproject-feature-auth feature/user-authentication
# Tạo một worktree khác cho việc sửa lỗi
git worktree add ../myproject-bugfix-login bugfix/login-validation
# Liệt kê tất cả worktree
git worktree list
Mỗi worktree là một thư mục làm việc hoàn chỉnh nơi tôi có thể thực hiện thay đổi, chạy thử nghiệm và commit mà không làm ảnh hưởng đến các worktree khác.
Phép Màu Của Claude Code
Đây là phần thú vị. Tôi mở iTerm2 và tạo nhiều cửa sổ (Cmd+D và Cmd+Shift+D là bạn đồng hành của bạn). Trong mỗi cửa sổ, tôi điều hướng đến một worktree khác và bắt đầu một phiên Claude Code:
bash
# Cửa sổ 1: Công việc tính năng
cd ~/projects/myproject-feature-auth
claude
# Cửa sổ 2: Công việc sửa lỗi
cd ~/projects/myproject-bugfix-login
claude
# Cửa sổ 3: Chuẩn bị xem xét mã
cd ~/projects/myproject-refactor-api
claude
Mỗi phiên Claude Code duy trì ngữ cảnh riêng về nhiệm vụ cụ thể đó. AI hiểu nhánh mà tôi đang làm việc, các tệp mà tôi đang xử lý và lịch sử cuộc trò chuyện liên quan đến ticket cụ thể đó.
Lợi Ích Đáng Kể
- Năng suất cao: Tôi có thể tiến bộ trên 3-4 nhiệm vụ khác nhau cùng một lúc. Trong khi Claude thực hiện một giải pháp trong một cửa sổ, tôi có thể xem xét công việc của nó trong một cửa sổ khác hoặc bắt đầu thảo luận về một vấn đề khác.
- Giảm thiểu chuyển đổi ngữ cảnh: Mỗi phiên Claude yêu cầu rất ít đầu vào từ tôi vì nó nhớ toàn bộ lịch sử cuộc trò chuyện của chúng tôi. Tôi không cần phải giải thích lại vấn đề mỗi lần chuyển nhiệm vụ.
- Cô lập ngữ cảnh hoàn hảo: Mỗi worktree + phiên Claude hoàn toàn tách biệt. AI làm việc trên tính năng xác thực không bị nhầm lẫn với việc sửa lỗi mà tôi đang thực hiện trong cửa sổ khác.
- Tiếp tục từ bất kỳ đâu: Tôi có thể rời khỏi một nhiệm vụ giữa cuộc trò chuyện và quay lại sau vài giờ (hoặc vài ngày). Phiên Claude nhớ chính xác chúng tôi đã dừng lại ở đâu, những gì chúng tôi đang cố gắng đạt được và những phương pháp nào chúng tôi đã thử.
Thiết Lập Quy Trình Làm Việc Của Bạn
Dưới đây là quy trình thiết lập mà tôi khuyên bạn nên thực hiện:
1. Tạo cấu trúc worktree:
bash
# Từ thư mục dự án chính
git worktree add ../project-name-ticket-123 feature/ticket-123
git worktree add ../project-name-hotfix-456 hotfix/critical-bug-456
2. Cấu hình cửa sổ iTerm2:
- Mở iTerm2
- Chia theo chiều ngang: Cmd+Shift+D
- Chia theo chiều dọc: Cmd+D
- Sắp xếp các cửa sổ theo sở thích của bạn
3. Bắt đầu phiên Claude:
bash
# Trong mỗi cửa sổ, điều hướng đến worktree tương ứng
cd ../project-name-ticket-123
claude
4. Thiết lập ngữ cảnh trong từng phiên:
Hãy cho mỗi phiên Claude biết về nhiệm vụ cụ thể, hiển thị các tệp mã liên quan và giải thích những gì bạn đang cố gắng đạt được.
Những Gì Tôi Đã Học
Từ cuộc thử nghiệm quy trình làm việc này, tôi đã học rằng bảo tồn ngữ cảnh có giá trị hơn tôi tưởng tượng. Khả năng duy trì nhiều cuộc trò chuyện đồng thời với Claude, mỗi cuộc trò chuyện tập trung vào một miền vấn đề cụ thể, loại bỏ gánh nặng nhận thức của việc liên tục thiết lập lại ngữ cảnh.
Sự kết hợp này hoạt động hiệu quả vì:
- Git Worktree giải quyết vấn đề cô lập kỹ thuật
- Claude Code giải quyết vấn đề duy trì ngữ cảnh
- Nhiều cửa sổ giải quyết vấn đề chuyển đổi
Những Điều Cần Cân Nhắc
Quy trình làm việc này không hoàn hảo cho mọi người:
- Sử dụng tài nguyên: Chạy nhiều phiên Claude tiêu tốn nhiều tài nguyên hệ thống và cuộc gọi API hơn.
- Khối lượng nhận thức: Bạn vẫn cần theo dõi nhiều nhiệm vụ trong đầu, mặc dù cơn đau chuyển đổi ngữ cảnh đã giảm đáng kể.
- Độ phức tạp: Nhiều thành phần chuyển động có nghĩa là có nhiều thứ có thể xảy ra sai (mặc dù tôi chưa gặp phải vấn đề nào).
Câu Hỏi & Đáp: Giải Quyết Chi Tiết
Sau khi chia sẻ quy trình làm việc này với bạn bè, tôi đã nhận được một số câu hỏi thú vị cần được làm rõ:
- Q: Bạn làm thế nào để tiếp tục các phiên Claude sau nhiều giờ hoặc nhiều ngày?
- A: Rất đơn giản - tôi chỉ không đóng phiên Claude Code. Tôi giữ các cửa sổ terminal mở, vì vậy phiên duy trì ngữ cảnh mãi mãi (hoặc cho đến khi máy của tôi khởi động lại). Không cần xuất/nhập.
- Q: Vậy về sự đồng bộ nhánh và xung đột hợp nhất thì sao?
- A: Tôi giả định một quy trình PR ở đây. Mỗi nhánh worktree cuối cùng sẽ mở một PR chống lại nhánh chính. Việc cô lập có nghĩa là tôi không phải lo lắng về đồng bộ hóa cho đến khi đến thời điểm PR.
- Q: Bạn làm thế nào để quản lý giới hạn cửa sổ ngữ cảnh của Claude?
- A: Đây thực sự là một nút thắt. Khi ngữ cảnh trở nên quá lớn, đôi khi tôi cần bắt đầu lại hoặc chiến lược về những tệp nào tôi hiển thị cho Claude. Nó không hoàn hảo.
- Q: Những nhiệm vụ nào thực sự hưởng lợi từ quy trình làm việc này?
- A: Các tính năng hoặc lỗi được chia nhỏ rõ ràng với yêu cầu rõ ràng. Nếu bạn đang làm việc khám phá hoặc yêu cầu không rõ ràng, cách tiếp cận này có thể quá phức tạp.
- Q: Vậy về việc chạy thử nghiệm trên nhiều worktree thì sao?
- A: Các thử nghiệm chạy độc lập trong mỗi worktree. Miễn là bạn không sử dụng cổng cứng hoặc tài nguyên chia sẻ, việc thực hiện thử nghiệm song song hoạt động tốt.
- Q: Bạn theo dõi cửa sổ nào là nhiệm vụ nào?
- A: Mẹo iTerm2 - nhấn Cmd+I để đặt tên phiên tùy chỉnh cho mỗi cửa sổ. Tôi đặt tên theo số ticket hoặc tên tính năng.
- Q: Bạn làm thế nào để dọn dẹp các worktree cũ?
- A: Tôi chưa có quy trình dọn dẹp nào. Đó chắc chắn là điều tôi cần tìm hiểu khi danh sách worktree của tôi tăng lên.
git worktree prunegiúp dọn dẹp các nhánh đã xóa, nhưng dọn dẹp thủ công vẫn cần thiết.
Những Điều Tiếp Theo
Tôi rất hào hứng để tối ưu hóa quy trình làm việc này hơn nữa. Một số ý tưởng mà tôi đang khám phá:
- Tạo các alias shell để thiết lập nhanh worktree + phiên Claude
- Sử dụng tmux để quản lý phiên tốt hơn
- Phát triển một kịch bản đơn giản để tự động hóa toàn bộ quy trình thiết lập
- Xây dựng một quy trình dọn dẹp worktree
Quy trình làm việc này thực sự đã biến đổi cách tôi tiếp cận công việc phát triển. Thay vì sợ hãi những sự gián đoạn và chuyển đổi ngữ cảnh, tôi giờ đây nhìn nhận chúng như những cơ hội để tiến bộ song song trên nhiều mặt trận.
Hãy thử nghiệm và cho tôi biết cách hoạt động của nó với bạn nhé!