#!/bin/sh set -e MSG_FILE=$1 if [ ! -f "$MSG_FILE" ]; then printf '%s\n' '提交信息文件不存在。' >&2 exit 1 fi IFS= read -r FIRST_LINE < "$MSG_FILE" || FIRST_LINE= case "$FIRST_LINE" in Merge*) exit 0 ;; esac if ! printf '%s\n' "$FIRST_LINE" | grep -Eq '^(feat|fix|refactor|docs|style|test|chore): .+$'; then cat >&2 <<'EOF' 提交信息格式错误。 格式: <类型>: <简短描述> 类型: feat / fix / refactor / docs / style / test / chore 示例: feat: 添加供应商批量管理功能 fix: 修复流式响应断连问题 chore: 版本升迁 v0.2.0 EOF exit 1 fi DESCRIPTION=${FIRST_LINE#*: } if printf '%s\n' "$DESCRIPTION" | LC_ALL=C grep -Eq '^[ -~]+$'; then printf '%s\n' '提交描述需使用中文。' >&2 exit 1 fi if [ ${#FIRST_LINE} -gt 72 ]; then printf '%s\n' '警告: 提交信息首行超过 72 个字符,建议保持简短。' >&2 fi