Dùng Codex Worktree để sửa hai việc song song và bàn giao thay đổi có kiểm tra

Trang 60 / 63

Chương 60

Dùng Codex Worktree để sửa hai việc song song và bàn giao thay đổi có kiểm tra

Bạn đang sửa trang thanh toán nhưng cần giao Codex chỉnh lỗi ở trang liên hệ. Trong khoảng 30 đến 45 phút, bạn có thể mở hai bản làm việc, kiểm tra từng bản rồi đưa thay đổi về nơi phù hợp. Bạn cần dự án Git, ChatGPT desktop có Codex và quyền chạy lệnh kiểm tra.

Theo hướng dẫn Worktrees của OpenAI, Codex dùng Git worktree để tạo một bản làm việc thứ hai cho cùng repo. Mỗi bản có tệp riêng nhưng chia sẻ lịch sử Git. Đây là cách tách hai việc có thể làm song song, không phải cách bỏ qua bước xem diff, chạy thử và duyệt thay đổi. Nếu bạn mới dùng Codex với repo, hãy bắt đầu từ bài sửa một chi tiết bằng Codex CLI.

🧰 Chuẩn bị

Mở dự án trong ChatGPT desktop và chọn Codex. Xác nhận thư mục dự án nằm trong một repo Git. Hãy chọn hai việc nhỏ, độc lập: một việc ở trang thanh toán, một việc ở trang liên hệ. Nếu cả hai cùng sửa một tệp hoặc phụ thuộc cùng một thay đổi chưa hoàn thành, hãy tách yêu cầu rõ hơn trước khi chạy song song.

Ghi nhánh bắt đầu, trạng thái tệp và lệnh kiểm tra. Đừng đưa mật khẩu hay dữ liệu khách hàng vào prompt. Bài giữ phạm vi và quyền khi giao việc cho Codex đi sâu vào quyền chạy lệnh.

Trong tài liệu OpenAI, Local là bản làm việc bạn đang mở, Worktree là bản Git riêng do Codex tạo, còn Hand off chuyển cuộc trò chuyện và mã giữa hai nơi. Worktree cần Git. Dự án không có Git sẽ không có luồng này theo cùng cách. Worktree trên điện thoại cũng không chạy tại điện thoại; tính năng Remote điều khiển máy tính hoặc môi trường từ xa đã kết nối.

🪜 Làm từng bước

1. Chọn việc đủ độc lập để thử song song

Viết hai phiếu việc, mỗi phiếu có đầu vào, phạm vi và cách biết đã xong. Ví dụ: “Sửa thông báo lỗi khi biểu mẫu liên hệ thiếu email” và “Làm rõ nhãn nút xác nhận trên trang thanh toán”. Đừng giao chung một câu “sửa UX” cho cả hai cuộc trò chuyện, vì bạn sẽ khó biết bản nào chịu trách nhiệm cho thay đổi nào.

Mở một cuộc trò chuyện Codex cho việc thứ nhất ở Local. Với việc thứ hai, ở màn hình tạo cuộc trò chuyện, chọn Worktree dưới ô nhập. Chọn nhánh làm điểm bắt đầu, rồi gửi yêu cầu. Codex tạo worktree từ nhánh đã chọn. Tài liệu OpenAI cho biết bản này mặc định ở trạng thái detached HEAD, nghĩa là nó chưa nằm trên một nhánh mới riêng.

Bạn có thể sao chép mẫu giao việc này và thay phần trong ngoặc vuông:

Trong dự án [tên dự án], chỉ sửa [trang hoặc thành phần].
Mục tiêu: [hành vi cụ thể sau khi sửa].
Không thay đổi [khu vực ngoài phạm vi].
Trước khi kết thúc, chạy [lệnh kiểm tra của dự án].
Báo lại tệp đã đổi, kết quả kiểm tra và điều còn chưa xác nhận.

Những dòng “không thay đổi” và “báo lại” giúp bạn kiểm tra đầu ra. Nếu repo có quy tắc nhóm trong AGENTS.md, Codex còn đọc được các hướng dẫn áp dụng cho thư mục đang làm. Xem cách thống nhất quy tắc bằng AGENTS.md.

2. Thiết lập worktree để kiểm tra được

Worktree là một thư mục khác. Nó có tệp Git theo commit bắt đầu nhưng có thể thiếu thư viện đã cài, tệp cấu hình bị Git bỏ qua hoặc dịch vụ đang chạy ở Local. Nếu gặp lỗi “thiếu package”, đừng kết luận mã Codex sai ngay. Kiểm tra môi trường trước.

Local environments của OpenAI cho phép đặt setup script chạy khi Codex tạo worktree và action cho lệnh thường dùng. Tính năng này chỉ có trong Codex của ChatGPT desktop. Với dự án Node, một setup script có thể cài thư viện và chạy build. Chọn lệnh phù hợp dự án; không sao chép nguyên lệnh ví dụ nếu repo dùng trình quản lý gói khác.

Setup script mẫu cho dự án phù hợp:
npm install
npm run build

Action kiểm tra mẫu:
npm test

Bạn cấu hình local environment trong phần Settings của ứng dụng. OpenAI nói cấu hình được lưu trong thư mục .codex ở gốc dự án và có thể đưa vào Git để nhóm dùng chung. Người mới nên thử trên một worktree trước khi áp dụng cho cả nhóm. Nếu setup script đòi quyền mạng hoặc chạy lệnh tốn thời gian, ghi rõ ai chịu trách nhiệm duyệt.

3. Xử lý tệp bị bỏ qua một cách có chủ đích

Một worktree mới thường không có tệp mà .gitignore loại ra. Nếu ứng dụng thật sự cần một tệp cục bộ để chạy, OpenAI mô tả .worktreeinclude ở gốc repo để liệt kê tệp bị bỏ qua cần sao chép sang worktree cục bộ do Codex quản lý. Ví dụ của tài liệu có .env, .env.local và đường dẫn cấu hình riêng. Đây là cơ chế sao chép tệp, không phải lệnh để đưa chúng lên Git.

Hãy bắt đầu bằng tệp cấu hình giả hoặc biến môi trường thử. Chỉ đưa tệp nhạy cảm vào danh sách khi bạn hiểu rõ nó sẽ được sao chép sang thư mục nào, ai truy cập được thư mục đó và cách thu hồi. OpenAI lưu ý cơ chế này không áp dụng cho worktree ở xa hoặc worktree Git do bạn tự tạo từ dòng lệnh. Codex cũng không sao chép symlink nguồn hay ghi đè tệp đích đã tồn tại.

Đừng thêm toàn bộ thư mục chứa bí mật chỉ để một test chạy được. Nếu không cần tích hợp thật, thay bằng dữ liệu giả. Nếu cần quyền thật, kiểm tra riêng quyền truy cập và phạm vi công việc trước khi mở cho agent.

4. Xem kết quả từng việc trước khi đưa về Local

Khi Codex báo xong, mở diff của mỗi cuộc trò chuyện. Đọc tệp đổi, chạy lệnh kiểm tra trong chính worktree đã sửa, rồi thử hành vi trên giao diện nếu đó là lỗi giao diện. Local environments có Git controls để xem diff, ghi chú trực tiếp, đưa từng phần vào staging, commit, push và mở pull request trong ứng dụng.

Ghi kết quả riêng cho từng việc. Nếu hai worktree chạm cùng một tệp, hãy đọc diff và quyết định thứ tự đưa thay đổi về; Git không tự giải quyết mâu thuẫn nghiệp vụ.

5. Chọn giữ worktree hay Hand off

Nếu bạn muốn tiếp tục và kiểm tra ngay trong worktree, dùng Create branch here để tạo nhánh ở đó, rồi commit, push và mở pull request sau khi đã duyệt. Git không cho cùng một nhánh được checkout đồng thời ở hai worktree. Đừng cố mở nhánh đó trong Local khi worktree còn đang giữ nó.

Nếu bạn cần kiểm tra bằng IDE, dev server hoặc môi trường đã sẵn có ở Local, dùng Hand off trong tiêu đề cuộc trò chuyện để chuyển về Local. Tài liệu OpenAI nói ứng dụng xử lý thao tác Git cần thiết cho việc chuyển này. Nếu sau đó chuyển lại, cuộc trò chuyện trở về worktree gắn với nó. Hãy xem lại trạng thái Git trước và sau khi chuyển, nhất là khi Local có thay đổi chưa commit.

Đừng coi Handoff là một nút “merge mọi thứ”. Kiểm tra diff, test và nhánh sau khi chuyển. Nếu dự án có quy trình pull request, giữ bước review đó. Với tác vụ lớn, bạn có thể xem cách chia việc bằng Codex Subagents, nhưng subagent là một luồng phân chia việc khác với việc mở hai checkout Git.

✅ Kết quả mẫu

Sau thử nghiệm, việc liên hệ chỉ đổi biểu mẫu và có kết quả npm test pass trong worktree của nó. Việc thanh toán chỉ đổi nhãn nút, đã được bạn xem trên giao diện và thử luồng xác nhận. Bạn tạo nhánh cho việc liên hệ để mở pull request, còn việc thanh toán được Hand off về Local để thử với môi trường thanh toán giả lập. Bảng ghi việc của nhóm giữ riêng hai mã việc, hai diff và hai kết quả kiểm tra.

Nếu worktree chưa có thư viện để chạy test, ghi “chưa kiểm chứng”. Sau khi setup, chạy lại test rồi mới đổi trạng thái.

💡 Mẹo để kết quả tốt hơn

Đặt tên cuộc trò chuyện theo việc. Giữ mỗi việc đủ nhỏ để xem diff nhanh. Nếu cần file không có trong Git, ghi nó vào checklist trước khi mở worktree; đừng đợi test lỗi mới tìm. Dùng action chung cho lệnh test lặp lại để người mới làm cùng một bước.

OpenAI cho biết worktree do Codex quản lý có thể được dọn tự động; mặc định ứng dụng giữ 15 worktree gần đây và bạn có thể đổi giới hạn trong Settings. Cuộc trò chuyện đang chạy, được ghim hoặc worktree cố định không bị dọn tự động theo cơ chế này. Nếu cần môi trường lâu dài, tạo permanent worktree thay vì trông chờ vào một bản tạm.

⚠️ Giới hạn cần biết

Worktree không tách hoàn toàn mọi thứ. Các bản vẫn chia sẻ metadata Git và có thể cùng phụ thuộc dịch vụ, cơ sở dữ liệu hoặc cổng chạy trên một máy. Hai tác vụ chạm cùng dữ liệu thật vẫn có thể ảnh hưởng nhau. Hãy dùng dữ liệu thử và tài khoản thử khi có khả năng ghi.

Các tệp bị Git bỏ qua không tự đi cùng Handoff, trừ trường hợp Codex sao chép chúng vào worktree cục bộ qua .worktreeinclude. Tệp bí mật được sao chép là một bản sao có quyền truy cập riêng cần quản lý. Với worktree ở xa, hãy xác nhận cơ chế môi trường riêng thay vì dựa vào hướng dẫn sao chép cục bộ.

Tính năng và giao diện có thể đổi. Nếu bạn không thấy Worktree hoặc Local environments, kiểm tra đúng ứng dụng desktop, đang ở Codex và dự án có Git. Đừng áp dụng các bước màn hình desktop cho một phiên Codex CLI hoặc trình duyệt mà chưa đối chiếu tài liệu phù hợp.

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

Dự án không dùng Git có tạo Codex Worktree được không? Không theo luồng này. Worktree dựa trên Git. Bạn có thể làm trong thư mục dự án nhưng không có bản checkout riêng bằng tính năng Worktree.

Tôi phải tạo nhánh trước khi bắt đầu không? Không. Khi bạn chọn Worktree và nhánh gốc, Codex mặc định tạo checkout ở detached HEAD. Tạo nhánh trong worktree khi bạn muốn giữ và đưa thay đổi lên remote.

Vì sao test chạy ở Local nhưng lỗi trong Worktree? Kiểm tra thư viện, setup script, tệp bị bỏ qua, biến môi trường và dịch vụ phụ thuộc. Worktree là một thư mục khác nên môi trường có thể khác.

Có thể checkout cùng một nhánh ở Local và Worktree không? Git không cho cùng nhánh được checkout ở hai worktree cùng lúc. Dùng Handoff hoặc tạo nhánh khác phù hợp với quy trình của nhóm.

Tôi xóa worktree thì mất cuộc trò chuyện không? Tài liệu OpenAI nói cuộc trò chuyện có thể còn trong lịch sử. Với worktree do Codex quản lý, ứng dụng lưu snapshot trước khi dọn và có thể cho khôi phục khi bạn mở lại cuộc trò chuyện. Vẫn nên commit hoặc lưu kết quả quan trọng theo quy trình repo.

Nguồn chính thức: Worktrees và Local environments, OpenAI Learn, đối chiếu ngày 5/10/2026.

#Codex #GitWorktree #ChatGPT #VibeCoding