场景1:检查commit message是否包含日报格式
使用 commit-msg 钩子检查提交信息格式:

#!/bin/bash
# .git/hooks/commit-msg
# 定义日报格式要求
PATTERN="^\[(日报|周报|日常更新)\] .+"
# 读取commit message
COMMIT_MSG=$(cat "$1")
# 检查是否匹配格式
if [[ ! "$COMMIT_MSG" =~ $PATTERN ]]; then
echo "错误:提交信息不符合日报格式要求!"
echo "格式:[日报/周报/日常更新] 具体内容"
echo "示例:[日报] 完成了用户登录模块的后端接口开发"
exit 1
fi
# 可选:检查是否包含日期
DATE_PATTERN=$(date +%Y-%m-%d)
if [[ "$COMMIT_MSG" == *"$DATE_PATTERN"* ]]; then
echo "✓ 提交信息包含当前日期"
fi
exit 0
场景2:检查日报文件内容是否符合规范
使用 pre-commit 钩子检查特定日报文件:
#!/bin/bash
# .git/hooks/pre-commit
# 检查是否有日报文件被修改
DAILY_REPORT_FILE="daily_report.md"
if git diff --cached --name-only | grep -q "$DAILY_REPORT_FILE"; then
echo "检查日报文件..."
# 获取暂存区中的日报内容
REPORT_CONTENT=$(git diff --cached "$DAILY_REPORT_FILE" | grep "^+" | grep -v "^+++")
# 检查必要字段
CHECKS_PASSED=true
# 1. 检查是否有日期
if ! echo "$REPORT_CONTENT" | grep -qE "日期|Date|$(date +%Y-%m-%d)"; then
echo "❌ 缺少日期信息"
CHECKS_PASSED=false
fi
# 2. 检查是否有工作内容
if ! echo "$REPORT_CONTENT" | grep -qE "工作内容|任务|完成|进行"; then
echo "❌ 缺少工作内容描述"
CHECKS_PASSED=false
fi
# 3. 检查是否有计划(可选)
if ! echo "$REPORT_CONTENT" | grep -qE "计划|明日|下一步"; then
echo "⚠️ 未发现明日计划(可选)"
fi
# 4. 检查日报字数(至少50字)
WORD_COUNT=$(echo "$REPORT_CONTENT" | wc -m)
if [ "$WORD_COUNT" -lt 50 ]; then
echo "❌ 日报内容过短(当前${WORD_COUNT}字,建议至少50字)"
CHECKS_PASSED=false
fi
if [ "$CHECKS_PASSED" = false ]; then
echo "日报格式检查未通过,请完善后重新提交"
exit 1
else
echo "✓ 日报格式检查通过"
fi
fi
exit 0
使用说明
安装钩子
# 进入项目目录 cd your-project # 创建钩子文件 cat > .git/hooks/commit-msg << 'EOF' #!/bin/bash # 把上面的脚本内容粘贴到这里 EOF # 赋予执行权限 chmod +x .git/hooks/commit-msg
日报模板示例 (daily_report.md)
# 日报 - 2024-01-15 ## 基本信息 - 姓名:张三 - 日期:2024-01-15 - 项目:XX管理系统 ## 今日工作内容 1. 完成了用户登录模块的后端接口开发 2. 修复了三个线上bug 3. 编写了相关单元测试(覆盖率达85%) ## 遇到的问题 - 数据库查询性能优化需要进一步调研 ## 明日计划 1. 完成接口联调测试 2. 开始用户权限管理模块开发
高级配置(可选)
创建配置文件 .githooks-config:
# 配置检查规则
DAILY_REPORT_FILE=daily_report.md
MIN_CONTENT_LENGTH=50
REQUIRED_FIELDS=("日期" "工作内容" "姓名")
OPTIONAL_FIELDS=("计划" "问题")
注意事项
-
临时跳过检查:
git commit --no-verify -m "跳过检查"
-
在团队中统一配置:
# 项目根目录创建hooks目录 mkdir -p .githooks
设置Git使用自定义hooks目录
git config core.hooksPath .githooks
3. **多平台兼容**:以上脚本基于bash,在Windows上需要使用Git Bash或WSL
这个钩子脚本可以确保团队成员提交的日报格式规范、内容完整,便于项目管理和追踪。