Git commit tôi yêu thích nhất (2019)
(dhwthompson.com)Git commit tôi yêu thích nhất
- Bài viết nhấn mạnh tầm quan trọng của thông điệp commit Git và cho rằng đây là một trong những công cụ mạnh mẽ nhất để tài liệu hóa codebase.
- Tác giả giải thích lý do thông qua ví dụ về commit của lập trình viên Dan Carley có tiêu đề "Convert template to US-ASCII to fix error".
- Dựa trên kinh nghiệm tại GDS (Government Digital Service), tác giả cho rằng một trong những lợi ích của việc lập trình công khai là có thể chia sẻ những ví dụ như vậy ra ngoài tổ chức.
Vì sao commit này hay
- Tỷ lệ giữa thông điệp commit và phần thay đổi mã là điều thú vị, nhưng đó không phải là lý do tác giả cho rằng nó đáng để chia sẻ.
- Nếu ở một tổ chức khác hoặc do một lập trình viên khác viết, thông điệp commit này có thể đã chỉ được tóm tắt là
change whitespacehoặcfix bug. - Thay vào đó, Dan đã dành thời gian để tạo ra một thông điệp commit thực sự hữu ích cho những người xung quanh.
Giải thích lý do thay đổi
- Những thông điệp commit tốt nhất không chỉ giải thích đã thay đổi gì mà còn cả vì sao lại thay đổi.
- Trong commit này, tác giả giải thích chi tiết vì sao bài kiểm thử được thêm vào để khớp nội dung của
/etc/nginx/router_routes.conflại bị lỗiArgumentError: invalid byte sequence in US-ASCIIkhi chạy bằngbundle exec rake. - Đây là loại thông tin rất đáng để tài liệu hóa, vì nó rất dễ bị mất đi khi mọi người quên mất bối cảnh ban đầu, chuyển sang nhóm khác hoặc rời tổ chức.
Có thể tìm kiếm được
- Phần đầu của thông điệp commit chứa thông báo lỗi đã dẫn đến thay đổi, vì vậy bất kỳ ai cũng có thể chạy
git log --grep "invalid byte sequence"trong codebase hoặc dùng tính năng tìm kiếm commit của GitHub để tìm lỗi này. - Trên thực tế, đã có nhiều người tìm kiếm vấn đề này và có thể biết được trước đây ai đã gặp nó, cũng như họ đã xử lý nó như thế nào.
Truyền tải một câu chuyện
- Thông điệp commit chứa các chi tiết cụ thể về việc vấn đề trông như thế nào, quá trình điều tra diễn ra ra sao và cách nó được giải quyết.
- Thông điệp commit không chỉ phù hợp để tài liệu hóa một tệp, hàm hay dòng mã cụ thể, mà còn đặc biệt phù hợp để ghi lại thêm thông tin về hành trình mà codebase đã trải qua.
Giúp mọi người thông minh hơn một chút
- Việc Dan ghi lại các lệnh đã chạy ở từng bước có thể là một cách nhẹ nhàng để chia sẻ kiến thức trong nhóm.
- Khi đọc thông điệp commit này, ai đó có thể học được một vài mẹo hữu ích về bộ công cụ Unix.
- Cả người review thay đổi này lẫn người tìm lại commit đó về sau đều có thể học được những điều này.
Xây dựng sự cảm thông và niềm tin
- Đoạn cuối cùng bổ sung thêm bối cảnh rất con người.
- Khi đọc nó, bạn có thể cảm nhận được sự bực bội của Dan khi phải mất một giờ để lần theo một lỗi khó chịu, cũng như sự thỏa mãn khi giải quyết xong.
- Những thông điệp commit như vậy giúp chúng ta nhớ rằng đằng sau mỗi thay đổi đều là một con người đã cố gắng đưa ra quyết định tốt nhất.
Tầm quan trọng của một commit tốt
- Đây là một ví dụ ở mức cực đoan, và tác giả không kỳ vọng mọi commit đều phải có mức độ chi tiết như thế này.
- Tuy nhiên, đây là một ví dụ tuyệt vời về việc giải thích bối cảnh đằng sau thay đổi, giúp người khác học hỏi và đóng góp vào mô hình tinh thần tập thể của cả nhóm về codebase.
- Nếu muốn tìm hiểu thêm về lợi ích của thông điệp commit tốt và các công cụ giúp cấu trúc nó dễ hơn, tác giả gợi ý "Telling stories through your commits" của Joel Chippindale và "A branch in time" của Tekin Süleyman.
Ý kiến của GN⁺
- Bài viết này nhấn mạnh tầm quan trọng của thông điệp commit Git, đồng thời cho thấy nó có thể trở thành một công cụ mạnh mẽ như thế nào trong việc ghi lại lịch sử của codebase và chia sẻ tri thức.
- Thông điệp commit của Dan Carley là một ví dụ kiểu mẫu trên nhiều khía cạnh như giải thích lý do thay đổi, khả năng tìm kiếm, truyền tải câu chuyện, chia sẻ kiến thức, và xây dựng sự cảm thông cùng niềm tin.
- Bằng cách hiểu và thực hành việc viết thông điệp commit tốt, các lập trình viên có thể trải nghiệm sự cộng tác tốt hơn và việc bảo trì mã hiệu quả hơn, từ đó góp phần nâng cao năng suất và hiệu quả của cả nhóm.
1 bình luận
Ý kiến trên Hacker News
Ý kiến của đồng sáng lập GitHub:
git blameđể tìm thông điệp commit liên quan cũng rất khó.Tầm quan trọng của thông điệp commit đối với các vấn đề cụ thể:
Cảm nhận cá nhân về thông điệp commit:
Chiến lược viết dòng đầu tiên của thông điệp commit:
git log, dòng đầu tiên là quan trọng nhất.Sự khó khăn khi chỉnh sửa thông điệp commit:
.md, wiki hoặc Confluence thì dễ chỉnh sửa hơn.Tầm quan trọng của giải thích chi tiết cho các commit nhỏ:
Giới hạn của thông điệp commit và vấn đề của công cụ:
Tầm quan trọng của vệ sinh commit so với thông điệp commit:
Phê bình auto-squash và rebase: