Git钩子脚本如何检查日报内容

wen 实用脚本 1

场景1:检查commit message是否包含日报格式

使用 commit-msg 钩子检查提交信息格式:

Git钩子脚本如何检查日报内容

#!/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=("计划" "问题")

注意事项

  1. 临时跳过检查

    git commit --no-verify -m "跳过检查"
  2. 在团队中统一配置

    # 项目根目录创建hooks目录
    mkdir -p .githooks

设置Git使用自定义hooks目录

git config core.hooksPath .githooks


3. **多平台兼容**:以上脚本基于bash,在Windows上需要使用Git Bash或WSL
这个钩子脚本可以确保团队成员提交的日报格式规范、内容完整,便于项目管理和追踪。

抱歉,评论功能暂时关闭!