Vì sao một số người thích review mã bằng "interdiff"
Đánh giá công cụ review mã Gerrit
- Gerrit là một công cụ review mã nguồn mở, hoạt động cùng với kho Git
- Có thể viết patch trong kho và gửi lên để review
- Người khác sẽ xem xét đoạn mã đã viết và chỉ ra những vấn đề cần sửa
- Review mã nói chung là một ý tưởng tốt
- Trong các dự án mã nguồn mở, mã có thể được hợp nhất, điều này làm tăng trách nhiệm và nợ kỹ thuật
Nhiều công cụ review mã khác nhau
- Có nhiều công cụ như Gerrit, GitHub, Phabricator, tải tệp
.patch lên bug tracker, gửi email qua git send-email, v.v.
- Mỗi công cụ hoạt động hiệu quả ở những mức độ khác nhau
Chuỗi patch lý tưởng
- Một chuỗi gồm 3 patch thể hiện sự tiến hóa của codebase theo từng bước
- Các thay đổi nên được tách biệt một cách logic, và mỗi patch cần đọc như thể nó được áp dụng một cách độc lập
- Review mã là quá trình xem xét chuỗi lý tưởng này
Cách GitHub review mã: "diff soup"
- GitHub ban đầu khuyến khích review bằng cách thêm commit mới lên trên các commit gốc
- Điều này xuất phát từ thiết kế UX và nhiều lý do khác
- Khi nhiều commit được thêm vào trong quá trình review, mối quan hệ ngầm giữa các commit trở nên phức tạp
- Việc dùng các công cụ
git blame và git bisect trở nên khó khăn hơn
Cách tốt hơn: review "interdiff" (AKA git range-diff)
- Thay vì thêm commit mới, hãy đăng một phiên bản mới của các commit gốc
- Dùng
git range-diff để so sánh sự khác biệt giữa các phiên bản commit
- Reviewer có thể review theo phần tăng thêm mà không cần đọc lại toàn bộ diff
- Các công cụ
git blame và git bisect hoạt động đáng tin cậy hơn
Giải thích thêm: chiến lược hợp nhất patch
- Cách trên là độc lập với chiến lược hợp nhất (ví dụ:
git rebase so với commit git merge nhiều cha)
Giải thích thêm: liệu git rebase có xấu không
git rebase là ổn. Chỉ không nên dùng nó trên các nhánh công khai mà người khác sẽ dựa vào các commit đó
Ghi chú khác
Kết luận
- Hệ thống review interdiff khuyến khích các patch nhỏ hơn và được hợp nhất vào nhánh chính nhanh hơn
- Nó mang lại trải nghiệm review mã tốt hơn cho cả reviewer lẫn tác giả
Tóm tắt của GN⁺
- Bài viết này đưa ra một phân tích chuyên sâu về các công cụ và phương pháp review mã
- Cách review interdiff có thể cải thiện đáng kể hiệu quả của việc review mã
- Nó giúp giải quyết vấn đề "diff soup" của GitHub
- Bài viết nêu ra những yếu tố quan trọng cần cân nhắc khi chọn công cụ review mã
- Các công cụ có chức năng tương tự gồm GitHub, Gerrit, Phabricator, v.v.
1 bình luận
Ý kiến Hacker News
Quy trình làm việc chủ yếu dùng trên GitHub có khối lượng thao tác lớn và không rõ ràng với cộng tác viên
git blamevàgit bisectgit commit --fixup <hash của commit cần cập nhật>git rebase --interactive origin/main --autosquashđể gộp các commit fixup vào commit gốcgit push --force-with-leaseđể hợp nhấtCách review code của GitHub kém hiệu quả, và đã phải xử lý thủ công bằng Phabricator
Muốn có một hệ thống tốt hơn cách review code của GitHub
Việc thấy những cách tiếp cận mới cho review code luôn rất thú vị
Review Board là nơi đầu tiên đưa interdiffs vào, và nó rất hữu ích trong review code
Đã có kinh nghiệm dùng hệ thống review code Gerrit, và cách review code của GitHub kém hiệu quả
Đã dùng nhiều hệ thống review code khác nhau và mỗi hệ thống đều có ưu, nhược điểm riêng
Sau khi dùng hệ thống review code Gerrit, stack PR của GitHub trở nên bất tiện