Featured image of post Sự khác biệt giữa phát triển bằng Git Worktree và Git Branch là gì? Khi nào thì nên sử dụng Git Worktree?

Sự khác biệt giữa phát triển bằng Git Worktree và Git Branch là gì? Khi nào thì nên sử dụng Git Worktree?

Đang phát triển dở tính năng mới thì đột nhiên có lỗi khẩn cấp cần sửa? Bực bội với môi trường rối tung và các tệp build còn sót lại? Bài viết này sẽ hướng dẫn bạn cách sử dụng Git Worktree như việc 'mở chi nhánh', giúp hiện thực hóa việc phát triển song song và cách ly môi trường thực sự, để mạch làm việc của bạn không còn bị gián đoạn!

Bạn đang phát triển tính năng mới được một nửa thì sếp đột nhiên bước vào và yêu cầu sửa một lỗi khẩn cấp. Bạn sẽ làm gì?

Hầu hết mọi người có lẽ sẽ dùng git stash để tống đoạn mã đang viết dở vào ngăn kéo, sau đó chuyển branch (nhánh) để sửa lỗi.

Nhưng nếu những thay đổi của bạn liên quan đến rất nhiều cấu hình môi trường, hoặc nếu việc chuyển nhánh làm cho node_modulesBuild Artifacts (Các tệp sau khi biên dịch) lây nhiễm chéo cho nhau thì sao? Chừng đó cũng đủ để khiến bạn muốn đập nát cái bàn phím rồi.

Đây chính là lúc Git Worktree trở thành vị cứu tinh của bạn!

Git Worktree là gì?

Bạn có thể liên tưởng cách hoạt động của Git giống như việc “cải tạo một căn nhà”.

Với lệnh git branch truyền thống, khi bạn chuyển nhánh, tất cả nội thất trong phòng sẽ ngay lập tức biến mất khỏi tầm mắt bạn và tự động sắp xếp lại cho phù hợp với một công việc khác.

Mặc dù nó giúp tiết kiệm không gian, nhưng nhược điểm là “ô nhiễm môi trường”. Bạn phải cất những chiếc đĩa bẩn vào tủ trước khi có thể chuyển đổi; và sau khi chuyển xong, mùi dầu mỡ từ lần thi công trước có thể vẫn còn vương vấn trong không khí.

Mặt khác, Git Worktree lại giống như việc bạn trực tiếp xây dựng một căn nhà giống hệt trên bãi đất trống ngay bên cạnh.

Nói một cách đơn giản, nguyên lý cơ bản của Git là:

“Một linh hồn (cơ sở dữ liệu .git), nhiều thể xác (thư mục làm việc).”

Bạn có thể đồng thời sở hữu “chi nhánh phát triển tính năng” và “chi nhánh sửa chữa khẩn cấp”. Tay trái bạn viết logic AI ở Cửa sổ A, trong khi tay phải bạn sửa lỗi ở Cửa sổ B, hai bên hoàn toàn không can thiệp vào nhau. Đó mới là phát triển song song thực sự.

Hướng dẫn thực hành Worktree

Để duy trì trạng thái tập trung cao độ (flow) trong quá trình phát triển, cấu trúc thư mục và cấu hình môi trường là chìa khóa.

1. Quản lý thư mục song song: Đừng xây dựng chi nhánh bên trong trụ sở chính

Nhiều người sử dụng Worktree lần đầu tiên thường lóng ngóng tạo thư mục mới bên trong thư mục dự án ban đầu. Tuyệt đối đừng làm như vậy! Điều này sẽ khiến Git rơi vào mớ hỗn độn đệ quy vô hạn. Cách tạo Git Worktree chính xác là:

Đặt trụ sở chính (main) và chi nhánh nhiệm vụ (feature) song song với nhau.

# Thực thi việc tạo Worktree từ trụ sở chính, nhưng đặt thư mục Worktree bên ngoài thư mục dự án ban đầu
git worktree add ../my-app-feat-ai dev-branch

Cấu trúc thư mục của bạn sẽ trông giống như thế này:

- my-project/       # Gói tổng thể
  - main-repo/      # Trụ sở chính ổn định
  - feat-ai-search/ # Chi nhánh mới đang được xây dựng

2. Cách ly cấu hình môi trường: Cung cấp cho mỗi chi nhánh một linh hồn riêng

Vì các thư mục dự án được tách biệt, các tệp cấu hình .env của bạn cũng có thể được tách biệt.

Bạn có thể kết nối với cơ sở dữ liệu thử nghiệm trong feat-ai-search, đồng thời vẫn giữ cơ sở dữ liệu phát triển ban đầu trong main. Bằng cách này, khi bạn chuyển đổi giữa các cửa sổ, bạn thậm chí không cần phải thay đổi thông tin kết nối.

Sau khi vào thư mục Worktree, bạn sử dụng trực tiếp các biến môi trường của thư mục Worktree cụ thể đó để phát triển, mà không cần phải thực hiện bất kỳ thao tác chuyển đổi môi trường hay cài đặt lại nào. Cảm giác “vừa bước vào là đã có thể bắt tay ngay vào công việc” đó thực sự rất tuyệt vời.

Quy trình hợp nhất (Merge) của Worktree

Sau khi hoàn thành việc phát triển bên trong Worktree, quy trình thực tế cũng giống hệt như một branch truyền thống, chỉ có thêm một thao tác “tháo dỡ”.

Các bước trong quy trình Mô tả
1. Commit & Push tại chi nhánh Bạn phải đích thân đến chi nhánh để xác nhận (ký duyệt).
2. Kiểm tra tại Trụ sở chính (Merge) Bạn có thể quay lại main để hợp nhất, hoặc chủ động mở một Pull Request (PR).
3. Tháo dỡ thanh lịch (Remove) Sau khi nhiệm vụ hoàn thành, đừng xóa thư mục một cách trực tiếp; hãy sử dụng một lệnh Git để dỡ bỏ nó: git worktree remove ../feat-ai-search

Bùmmmm! Túp lều Worktree tạm thời đã bị tháo dỡ, không gian ổ đĩa được thu hồi và trụ sở chính của bạn vẫn sạch sẽ tinh tươm.

Hướng dẫn phòng tránh cạm bẫy của Worktree

Mặc dù Worktree rất hữu ích, nhưng vẫn có một vài cạm bẫy cần lưu ý:

Mục Mô tả
Đừng tùy tiện di chuyển trụ sở chính Bởi vì Worktree ghi lại các đường dẫn tuyệt đối. Nếu bạn đổi tên thư mục trụ sở chính, chi nhánh Worktree sẽ ’tử vong’ vì nó không thể xác định được ’linh hồn’ của mình.
Không mở nhánh kép (dual-branching) Cùng một branch không thể được check out đồng thời ở hai Worktree.
Robot hút bụi prune Nếu bạn lỡ vụng về xóa thư mục bằng lệnh rm -rf, hãy nhớ chạy git worktree prune để dọn dẹp sạch sẽ bất kỳ bản ghi nào còn sót lại trong .git.

Kết luận: Tôi có nên ngừng sử dụng Git Branch không?

Các tình huống khác nhau sẽ đòi hỏi các phương pháp phát triển khác nhau. Vấn đề không phải là cái này thay thế cái kia, mà là cái nào phù hợp hơn.

Tình huống Mô tả
Các chỉnh sửa nhỏ nhặt hàng ngày Hãy tiếp tục sử dụng branch; nó nhẹ nhàng và nhanh chóng.
Các tác vụ trên quy mô lớn Ví dụ: tái cấu trúc quy mô lớn, các điều chỉnh trải dài trên nhiều biến môi trường, hoặc các tác vụ đòi hỏi sự cộng tác lâu dài với AI, khởi chạy một Worktree chắc chắn là sự lựa chọn tối ưu nhất.

Git Worktree không chỉ đơn thuần là một câu lệnh; nó là một công cụ mạnh mẽ giúp chúng ta duy trì mạch tư duy khi phát triển. Lần tới, khi phải đối mặt với một tác vụ cồng kềnh và bao quát, hãy thử mở một “chi nhánh Git Worktree độc lập” và tự mình trải nghiệm một quy trình phát triển mượt mà chưa từng có nhé!

Reference

All rights reserved,未經允許不得隨意轉載
Built with Hugo
Theme Stack thiết kế bởi Jimmy