Tổng quan và Centralized Workflow
Xem thửVấn đề cần giải quyết
Một đội mới có bốn người bắt đầu dự án. Có người muốn ai cũng push thẳng lên main cho nhanh, người khác muốn mọi thay đổi phải qua review, và một người đề nghị chia thành develop, release, hotfix như sách giáo khoa. Không ai sai hoàn toàn: không có workflow đúng cho mọi đội. Một Git workflow là quy ước về cách cả đội dùng Git nhất quán, và bạn chọn nó theo văn hóa, quy mô và nhịp phát hành.
Sau bài này, bạn có thể
- Nêu ba tiêu chí đánh giá một workflow và áp dụng để so sánh bốn workflow phổ biến.
- Mô tả Centralized Workflow, ưu nhược điểm và nỗi đau lớn nhất của nó.
- Chọn workflow phù hợp bằng cách trả lời vài câu hỏi về đội của bạn.
Tiên quyết: chương Làm việc với nhánh.
Tiêu chí đánh giá
- Có mở rộng theo quy mô đội không?
- Có dễ hoàn tác sai lầm không?
- Có bắt mọi người phải ghi nhớ quá nhiều quy ước không?
Bản đồ bốn workflow
Cách đọc hình. Bốn workflow xếp từ đơn giản tới phức tạp. Centralized chỉ có một dòng main ở kho trung tâm. Feature Branch thêm nhánh riêng cho mỗi tính năng và Pull Request. Gitflow thêm các nhánh vai trò cho chu kỳ phát hành. Forking cho mỗi người một bản fork riêng, phù hợp với đóng góp từ bên ngoài. Các bài sau lần lượt đi sâu vào ba workflow còn lại.
Chọn workflow nào
Chọn bằng cách trả lời lần lượt vài câu hỏi về đội của bạn.
Đang tải sơ đồ…
Cách đọc hình. Có người đóng góp từ ngoài tổ chức thì dùng Forking. Nếu không, hỏi tiếp có phát hành theo chu kỳ cố định không: có thì Gitflow. Nếu không, chọn Feature Branch khi cần review và main ổn định, hoặc Centralized khi đội nhỏ và muốn đơn giản nhất. Đây là điểm khởi đầu, không phải luật; nhiều đội lai giữa các workflow.
Centralized Workflow
Đơn giản nhất, hợp với đội nhỏ hoặc đội chuyển từ SVN. Mọi người làm trên một nhánh (main) và đẩy lên một kho trung tâm.
git clone <url-kho-trung-tam>
git push origin main
Nỗi đau điển hình: Dev A push trước, kho trung tâm đi trước máy Dev B, và push của B bị từ chối. Bạn đã thấy cơ chế này ở bài git push. Hãy xem lại nó như một tình huống hằng ngày của Centralized Workflow.
Đang tải Animation…
Bảng bước (bản đọc tĩnh của mô phỏng)
| Bước | Lệnh | Điều xảy ra |
|---|---|---|
| 1 | git push origin main | Remote đã có C5 mà bạn chưa có. Nếu nhận C4, nó sẽ phải bỏ C5, nên Git từ chối để bảo vệ công việc của đồng đội. |
| 2 | git pull --rebase origin main | Lấy C5 về rồi áp lại C4 của bạn lên trên thành C4' với hash mới. Lịch sử giờ là một đường thẳng. |
| 3 | git push origin main | Remote chỉ cần đi tiếp từ C5 tới C4' nên push được chấp nhận, là fast-forward. |
Biến thể: Đẩy nhánh mới với -u
| Bước | Lệnh | Điều xảy ra |
|---|---|---|
| 1 | git switch -c feature-login && git commit -m "Form đăng nhập" | Tạo nhánh mới và commit F1 trên máy bạn. Remote chưa biết nhánh này. |
| 2 | git push -u origin feature-login | Push tạo nhánh trên remote. Cờ -u ghi lại upstream: nhánh cục bộ theo dõi origin/feature-login. |
| 3 | git commit -m "Thêm nút gửi" | Commit tiếp F2 ở máy bạn. |
| 4 | git push | Nhờ upstream đã ghi, không cần chỉ rõ đích nữa. Git biết đẩy lên origin/feature-login. |
Giải đáp. Dev B chạy git pull --rebase origin main để đặt commit của mình lên trên commit mới của A, rồi git push được chấp nhận. Quy tắc: đồng bộ trước, push sau, đừng force push.
Ưu và nhược điểm
- Ưu: dễ hiểu, dễ bắt đầu, giống SVN.
- Nhược: không có review có cấu trúc; dễ nghẽn khi đội đông vì mọi người đụng nhau trên một nhánh.
Centralized là viên gạch nền: các workflow mạnh hơn (Feature Branch, Gitflow, Forking) đều mở rộng từ ý tưởng có một kho trung tâm.
Hiểu lầm thường gặp
- "Workflow phức tạp hơn thì tốt hơn." Gitflow trên một đội hai người chỉ tốn thêm quy ước.
- "Phải chọn đúng một workflow." Đội thường lai: ví dụ Feature Branch cho tính năng và nhánh
hotfixcho sự cố. - "Centralized không có review." Bạn có thể review qua công cụ khác, nhưng Git không bắt buộc nó.
Tự kiểm tra
- Ba tiêu chí đánh giá một workflow là gì?
- Vì sao push của Dev B bị từ chối trong Centralized Workflow?
- Đội 3 người, phát hành liên tục, chưa cần review chặt. Workflow nào phù hợp?
Đáp án gợi ý. (1) Mở rộng, dễ hoàn tác, ít quy ước phải nhớ. (2) Vì kho trung tâm đã có commit của A mà B chưa có. (3) Centralized, hoặc Feature Branch nếu muốn thêm review.
Điều cần nhớ
- Không có workflow đúng cho mọi đội; chọn theo văn hóa, quy mô và nhịp phát hành.
- Centralized: một nhánh
main, đồng bộ trước rồi push. - Các workflow khác mở rộng từ ý tưởng kho trung tâm.
- Bài sau: Feature Branch Workflow.
Nguồn tham khảo
Tài liệu Atlassian Git Tutorial về Git Workflow; Pro Git, chương 5 "Distributed Git" (git-scm.com/book).