0

Chuẩn hóa chính sách Commit Message cho team của bạn

Conventional Commits là một cách chuẩn hóa để viết commit message. Việc tuân theo quy tắc này sẽ giúp bạn duy trì lịch sử commit rõ ràng, dễ đọc cho cả con người và máy móc.

Dưới đây là hướng dẫn nhanh về cách áp dụng chính sách này trên máy cá nhân của bạn để đảm bảo mọi commit luôn tuân thủ tiêu chuẩn.

Tạo thư mục dành cho Git hooks

mkdir -p ~/.git-templates/hooks

Cấu hình Git để sử dụng thư mục này

git config --global core.hooksPath ~/.git-templates/hooks

Tạo commit-msg hook

Tạo file tại ~/.git-templates/hooks/commit-msg:

#!/usr/bin/env bash

commit_msg_file=$1
commit_msg=$(cat "$commit_msg_file")

conventional_regex='^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(!)?(\([a-z0-9][a-z0-9\-]*[a-z0-9]\))?: [^\s].*[^\s]$'

if ! [[ $commit_msg =~ $conventional_regex ]]; then
  echo "-------------------------------------------------------------------------"
  echo " ❌ The commit message does not follow Conventional Commits specification"
  echo "     (see https://www.conventionalcommits.org/en/v1.0.0):"
  echo " Format: type(scope)?(!)?: subject"
  echo " Allowed types:"
  echo "     feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert"
  echo " Example: feat(api)!: Add validation to the create-user endpoint"
  echo "-------------------------------------------------------------------------"
  exit 1
fi

Bạn có thể điều chỉnh thông báo lỗi và regex nếu cần thiết.

Ví dụ về commit message hợp lệ:

  • feat: Add new user onboarding flow
  • fix(api): Correct error-handling for 404 responses
  • refactor(ui)!: Overhaul navigation for better accessibility
  • docs: Update README to reflect API changes

Biến hook thành tệp thực thi

Sau khi tạo commit-msg hook, hãy đảm bảo tệp này có quyền thực thi:

chmod +x ~/.git-templates/hooks/commit-msg

Kho lưu trữ hiện có

Các kho lưu trữ hiện có sẽ không tự động sử dụng global hooks mới nếu thư mục .git/hooks đã tồn tại. Trong trường hợp này, bạn có thể:

  1. Xóa hoặc đổi tên thư mục hooks trong repo để Git sử dụng global hooks.
  2. Sao chép hoặc tạo symlink từ commit-msg hook vào thư mục hooks của từng repo theo cách thủ công.

Sau khi thiết lập xong, bất kỳ commit message nào không đúng với regex sẽ bị từ chối, đảm bảo tất cả commit trong kho lưu trữ cục bộ của bạn tuân thủ Conventional Commits.

Mong rằng bài viết này sẽ hữu ích đối với các bạn!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí