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ể:
- Xóa hoặc đổi tên thư mục hooks trong repo để Git sử dụng global hooks.
- 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