0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Hướng Dẫn Quy Tắc Sử Dụng Git Hiệu Quả

Đăng vào 4 tháng trước

• 7 phút đọc

Giới Thiệu

Trong hơn một thập kỷ qua, tôi đã có cơ hội thử nghiệm với nhiều chiến lược và phong cách sử dụng Git khác nhau. Từ việc đặt tên nhánh cho đến mô tả yêu cầu kéo (pull request), tôi đã dành nhiều thời gian để suy nghĩ về cách tốt nhất để mô tả công việc của chúng tôi nhằm truyền đạt thông tin một cách rõ ràng và ngắn gọn nhất đến người khác. Có nhiều chiến lược và hướng dẫn phong cách để tận dụng tốt hệ sinh thái Git, nhưng không có giải pháp nào hoàn hảo cho mọi tình huống. Bài viết này sẽ phác thảo một số quy tắc và hướng dẫn mà tôi đã áp dụng vào cuộc sống hàng ngày với Git, những điều này đã hoạt động tốt cho đội ngũ của tôi.

Lưu ý: Đây là tài liệu đang phát triển và đã được điều chỉnh qua nhiều năm. Nó có thể không áp dụng cho bạn và tình huống của bạn, nhưng có thể có một số điểm hữu ích giúp cải thiện quy trình làm việc và hạnh phúc của nhà phát triển.

Nhánh (Branches)

99% thời gian, các thay đổi mã nguồn rơi vào một trong số ít loại. Khi tạo một nhánh mới, việc đặt tên một cách rõ ràng và có ý nghĩa có thể giúp các nhà phát triển khác biết ngay loại thay đổi nào đang được giới thiệu. Điều này cũng giúp đơn giản hóa việc tìm kiếm một nhánh bằng cách hoàn thành tab trên máy tính của bạn khi chuyển đổi giữa các nhánh.

Các Loại Nhánh

Các loại nhánh sau đây thích hợp cho hầu hết các trường hợp sử dụng. Chúng có thể được tinh chỉnh hoặc thay đổi tùy thuộc vào trường hợp cụ thể của bạn.

  • feature - một tính năng mới
  • fix - sửa lỗi, hotfix, lỗi chính tả, v.v.
  • style - thay đổi về giao diện / trải nghiệm người dùng
  • test - thêm hoặc tái cấu trúc các bài kiểm tra; không thay đổi mã sản xuất
  • housekeeping - mọi thứ từ tái cấu trúc mã đến cập nhật tài liệu
  • devops - cập nhật các tệp cấu hình, phiên bản phần mềm, v.v.

Định Dạng Nhánh

Định dạng nhánh được đề xuất sẽ giúp dễ dàng nhận biết loại công việc đã được thực hiện trong nhánh với một cái tên dễ đọc và rõ ràng. Độ dài tối đa của tên nhánh là 255 ký tự nhưng tôi cố gắng giữ độ dài không quá 50 ký tự để dễ đọc hơn.

Copy
type-name_of_branch

Loại được phân tách khỏi tên nhánh bằng một dấu -, trong khi phần còn lại của tên được thực hiện theo định dạng snake case (các từ được phân tách bằng _).

Ngoài ra, nếu bạn đang sử dụng một ứng dụng theo dõi tác vụ / vấn đề như JIRA hoặc GitHub Projects, việc bao gồm số vấn đề / vé trong tên nhánh cũng sẽ tạo thêm tính khả thi và giúp tên nhánh dễ đọc hơn, ví dụ:

Copy
type/ticket#-name_of_branch

Ví dụ về tên nhánh:

Copy
feature-add_user_authentication
fix-about_page_infinite_redirect

// hoặc

feature/21-add_user_authentication
fix/42-about_page_infinite_redirect

Cam Kết (Commits)

Phát triển một định dạng có cấu trúc cho các thông điệp cam kết sẽ làm rõ mục đích của mỗi cam kết, dẫn đến một lịch sử git sạch hơn. Ngay lập tức, người ta có thể biết nếu một cam kết nhằm thêm một tính năng, sửa một lỗi hay chỉ để cải thiện chất lượng mã. Chúng ta nên cố gắng giữ công việc trong một nhánh nhỏ và có thể kiểm tra được, thường dẫn đến chỉ có một cam kết duy nhất cho mỗi nhánh, tuy nhiên, tốt hơn là có nhiều cam kết nhỏ trong một nhánh hơn là gộp tất cả các cam kết lại vào một trước khi hợp nhất. Điều này sẽ giúp dễ dàng hơn trong việc bisect các lỗi được giới thiệu.

Mẫu Thông Điệp Cam Kết:

Đây là một mẫu thông điệp cam kết mà tôi đã sử dụng trong một thời gian. Khi tôi cố gắng giữ cho các cam kết của mình cụ thể và riêng biệt, tôi định nghĩa dòng đầu tiên và để mọi thứ khác được chú thích. Tuy nhiên, nếu bạn đang đẩy một cam kết liên quan đến nhiều thay đổi, có thể tham chiếu đến một vấn đề hoặc mục tác vụ cụ thể, hoặc bao gồm các thay đổi có thể ảnh hưởng đến phát triển trong tương lai, thì nên làm rõ thông điệp cam kết với nhiều thông tin nhất có thể để giúp bạn (hoặc các thành viên trong đội) có một bức tranh rõ ràng về công việc đã được thực hiện chỉ bằng cách nhìn vào cam kết của bạn.

Chủ đề cam kết, như đã thấy dưới đây, có quy ước bắt đầu bằng loại công việc đang được cam kết (bug, feature, housekeeping, v.v.) tất cả đều ở dạng chữ thường, theo sau là một dấu chấm phẩy, một khoảng trắng và thông điệp cam kết, bắt đầu với chữ cái viết hoa, theo dạng mệnh lệnh, không có dấu chấm ở cuối.

Copy
type: [Ticket#](Tùy chọn) Tóm tắt thay đổi

# **--- Các Thay Đổi Đề Xuất ---**
#
#
# Vấn đề / Nhiệm vụ: [tên](url)

# --- KẾT THÚC CAM KẾT --- (thông tin chỉ, không cần bỏ chú thích)
# <type>: <subject> (Khoảng 50 ký tự)
# |<----  Sử Dụng Tối Đa 50 Ký Tự  ---->|
# Giải thích lý do vì sao thay đổi này được thực hiện
# |<----   Cố Gắng Giới Hạn Mỗi Dòng Tối Đa 72 Ký Tự   ---->|
# --------------------
# Loại có thể là
#    feature      (tính năng mới)
#    fix          (sửa lỗi)
#    style        (thay đổi giao diện / trải nghiệm người dùng)
#    test         (thêm hoặc tái cấu trúc các bài kiểm tra; không thay đổi mã sản xuất)
#    housekeeping (tái cấu trúc mã hoặc thêm tài liệu)
#    devops       (thay đổi nền tảng / kiến trúc)
# --------------------
# Nhớ rằng
#   - Sử dụng thái độ mệnh lệnh trong dòng chủ đề
#   - Không kết thúc dòng chủ đề bằng dấu chấm
#   - Tách chủ đề khỏi nội dung bằng một dòng trống
#   - Sử dụng nội dung để giải thích cái gì và tại sao chứ không phải là cách
# --------------------

Tất cả các dòng bắt đầu bằng # đều được chú thích và sẽ không hiển thị khi xem thông điệp cam kết, vì vậy nếu bạn định thêm thông tin trong tương lai vào thông điệp cam kết của mình, hãy chắc chắn bỏ chú thích các dòng cần thiết.

Bạn có thể thiết lập mẫu thông điệp cam kết mặc định của git với

Copy
git config --global commit.template ~/.gitmessage

Ví dụ về thông điệp cam kết:

Copy
feature: Thêm xác thực người dùng
fix: Vấn đề chuyển hướng vô hạn ở trang Giới thiệu

// hoặc

feature: [21] Thêm xác thực người dùng
fix: [42] Vấn đề chuyển hướng vô hạn ở trang Giới thiệu

Rất thường khi bắt đầu một phần công việc, tôi có thể không biết ngay lập tức thông điệp cam kết sẽ là gì vì nó thường phát triển khi công việc hoàn thành. Trong trường hợp này, tôi thường bắt đầu cam kết của mình bằng cách

Copy
wip: Không chắc vấn đề là gì

và sau đó, khi đã hoàn thành công việc và chuẩn bị nhánh cho việc xem xét, tôi sẽ đổi tên các thông điệp cam kết một cách phù hợp trong quá trình tái cấu trúc tương tác (git rebase -i).

Nhận Xét Kết Thúc

Đây không phải là tiêu chuẩn quy tắc git hoàn toàn mà bạn nên áp dụng và đó là điều đang liên tục phát triển và thay đổi khi tôi làm việc trên các dự án mới và khác nhau. Kinh nghiệm của mỗi người là khác nhau và phải được xử lý tương ứng, nhưng có thể có một số điểm hữu ích ở đây giúp bạn hướng dẫn quy trình git có cấu trúc và ngắn gọn hơn.

Để phát triển thêm các quy tắc, tôi cũng đã tạo ra các quy trình, quy trình làm việc và mẫu tiêu chuẩn khi nói đến các yêu cầu kéo (PR) của GitHub và các vấn đề ảnh hưởng đến việc đánh giá mã, kiểm tra QA và triển khai, nhưng đó là một câu chuyện cho một bài viết khác.

Tài Nguyên Thêm

1.) Nhiều cảm hứng cho các quy tắc này đã được lấy từ "Conventional Commits".

https://www.conventionalcommits.org/en/v1.0.0/#why-use-conventional-commits
https://marcodenisi.dev/en/blog/why-you-should-use-conventional-commits/

2.) Một bài viết kinh điển về cách tốt nhất để viết các thông điệp cam kết. Tôi đã thu thập nhiều lời khuyên về thông điệp cam kết trong bài viết này để bổ sung cho biến thể của tôi.

https://cbea.ms/git-commit/#imperative

3.) Một công cụ kiểm tra cam kết mà bạn có thể tích hợp vào quy trình làm việc của mình để thực thi một tiêu chuẩn về thông điệp cam kết. Có thể được cấu hình trong một hook GIT trước cam kết.

https://commitlint.js.org/#/

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào