每天自动发送 image-tool 和 voc 项目前一天的 Git 提交记录。
项目路径分支image-tool/home/admin/ua-image/code/UA-EC-Image-Tool所有 remote 分支voc-frontend/home/admin/voc/code/UA-VOC-Frontenddevvoc-backend/home/admin/voc/code/UA-VOC-Backenddev
bash
# 获取指定日期的提交(前一天)
TARGET_DATE="2026-03-22"
START_DATE="${TARGET_DATE} 00:00:00"
END_DATE="${TARGET_DATE} 23:59:59"
cd /path/to/repo
# image-tool: 获取所有 remote 分支
REMOTE_BRANCHES=$(git branch -r | grep -v '\->' | sed 's/^[[:space:]]*//')
for branch in $REMOTE_BRANCHES; do
echo "📍 $branch:"
git log --since="$START_DATE" --until="$END_DATE" --oneline --no-decorate "$branch"
done
# voc 项目:仅获取 dev 分支
echo "📍 origin/dev:"
git log --since="$START_DATE" --until="$END_DATE" --oneline --no-decorate "origin/dev"
bash
# 获取变更的文件列表
CHANGED_FILES=$(git diff --name-only "origin/main~1" "origin/main")
for file in $CHANGED_FILES; do
# 1. 检查硬编码密码/密钥
rg -n "(password|passwd|pwd|secret|api_key|apikey|token|credential)\s*[=:]\s*[\"'][^\"']+[\"']" "$file"
# 2. 检查硬编码 IP/URL
rg -n "(https?://|ftp://)[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" "$file"
# 3. 检查 SQL 拼接风险
rg -n "(execute|query|cursor\.execute)\s*\(\s*[\"'].*\+.*[\"']" "$file"
# 4. 检查 eval/exec 危险函数
rg -n "\b(eval|exec|system|os\.system|subprocess\.call)\s*\(" "$file"
# 5. 检查调试代码残留
rg -n "(console\.log|debugger|print\s*\(|logging\.debug)" "$file"
# 6. 检查 TODO/FIXME 标记
rg -n "(TODO|FIXME|XXX|HACK):" "$file"
done
安全检查项:
风险类型检查内容严重程度🔴 高危硬编码密码/API 密钥/Token严重🔴 高危SQL 注入风险(字符串拼接)严重🟡 中危eval/exec/system 危险函数中等🟡 中危硬编码内网 IP/URL中等🟢 低危console.log/debugger 调试代码轻微🟢 低危TODO/FIXME 技术债务轻微
bash
for file in $CHANGED_FILES; do
# 1. 检查长函数 (>50 行)
# 2. 检查大文件 (>500 行)
# 3. 检查重复代码模式
# 4. 检查命名规范 (驼峰/下划线)
# 5. 检查注释完整性
# 6. 检查错误处理
# 7. 检查边界条件
# 示例:检查空 catch 块
rg -n "catch\s*\(\s*\w+\s*\)\s*\{\s*\}" "$file"
# 示例:检查魔法数字
rg -n "[^0-9][0-9]{4,}[^0-9]" "$file" | grep -v "//"
# 示例:检查 var 使用 (JS)
rg -n "\bvar\s+\w+\s*=" "$file"
# 示例:检查缺少默认值
rg -n "process\.env\.[A-Z_]+\s*[^|]" "$file"
done
通用审查项:
类别检查内容建议📐 代码结构函数过长 (>50 行)拆分函数📐 代码结构文件过大 (>500 行)模块化拆分📐 代码结构嵌套过深 (>4 层)提前返回/卫语句🏷️ 命名规范变量/函数命名不清晰使用语义化命名🏷️ 命名规范魔法数字提取为常量📝 注释缺少函数/类注释添加文档注释📝 注释注释与代码不一致更新或删除注释⚠️ 错误处理空 catch 块添加日志或处理⚠️ 错误处理缺少边界检查添加验证♻️ 代码复用重复代码提取公共函数🔧 最佳实践使用 var 而非 let/const使用块级作用域🔧 最佳实践硬编码配置使用环境变量/配置
使用 message 工具发送:
json
{
"action": "send",
"channel": "dingtalk",
"target": "1923216025-1426160278",
"message": "📊 **Git 日报 - 2026-03-22**\n\n📁 **image-tool**:\n 📍 origin/main:\n - abc123 修复登录问题\n\n📁 **voc-frontend**:\n 📍 origin/main:\n - 无更新\n\n📁 **voc-backend**:\n 📍 origin/main:\n - ghi789 优化查询性能"
}
使用 cron 工具设置每天 10:00 执行:
json
{
"action": "add",
"job": {
"name": "git-daily-report",
"schedule": {
"kind": "cron",
"expr": "0 10 * * *",
"tz": "Asia/Shanghai"
},
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "你是一个 Git 日报助手。请执行以下任务:\n1. 获取昨天的日期(格式:YYYY-MM-DD)\n2. 检查以下仓库的 Git 提交记录:\n - /home/admin/ua-image/code/UA-EC-Image-Tool (所有 remote 分支)\n - /home/admin/voc/code/UA-VOC-Frontend (仅 dev 分支)\n - /home/admin/voc/code/UA-VOC-Backend (仅 dev 分支)\n3. 对 image-tool,先获取所有 remote 分支列表 (git branch -r),然后遍历每个分支获取提交;对 voc 项目,直接获取 origin/dev 分支的提交\n4. 获取每个项目的变更文件列表及改动统计 (git diff --stat, git diff --numstat)\n5. 对有代码变更的项目,进行代码审查:\n - 安全审查:硬编码密码、SQL 注入、危险函数、调试代码等\n - 通用 Code Review:代码结构、命名规范、注释、错误处理、最佳实践等\n6. 生成格式化的报告并通过 DingTalk 发送给用户 (target: 1923216025-1426160278)\n\n报告格式要求:\n- 每个项目列出提交信息和变更文件 (+x -y)\n- 代码审查分【安全审查】和【Code Review】两部分\n- 风险等级标注 (🔴🟡🟢)\n- 汇总风险和改进建议",
"deliver": true,
"channel": "dingtalk",
"to": "1923216025-1426160278"
}
}
}
用户: 每天早上 10 点发送 git 日报
AI 操作:
AI 回复: ✅ 已设置 Git 日报,每天 10:00 发送 image-tool 和 voc 项目所有 remote 分支的昨日提交记录~
用户: git 日报设置了吗?
AI 操作:
action: "list" 查询任务AI 回复:
text
📋 Git 日报状态:
🔄 git-daily-report - 每天 10:00
说"取消 git 日报"可删除~
用户: 取消 git 日报
AI 操作:
action: "list" 找到任务 IDaction: "remove" 删除任务AI 回复: ✅ 已取消 Git 日报任务
text
📊 **Git 日报 - {日期}**
📁 **image-tool** (origin/main):
📝 提交:abc123 修复登录问题
📄 变更文件 (2):
- src/login.js (+15 -3)
- src/api.js (+8 -1)
📁 **voc-frontend** (origin/dev):
📝 提交:def456 新增用户组件
📄 变更文件 (5):
- src/components/UserForm.vue (新增)
- src/views/UserView.vue (+120 -45)
- src/router/index.ts (+25 -2)
- src/types/user.ts (+10 -0)
- src/api/user.js (+30 -5)
📁 **voc-backend** (origin/dev):
📝 提交:ghi789 优化查询性能
📄 变更文件 (3):
- routes/user.js (+45 -12)
- services/db.js (+20 -8)
- utils/validator.js (+15 -3)
🔍 **代码审查**:
📁 **image-tool**:
变更文件:src/login.js, src/api.js
【安全审查】
- ✅ 未发现硬编码密码/密钥
- ✅ 未发现 SQL 注入风险
- ⚠️ src/login.js:15 发现 console.log 调试代码
【Code Review】
- ✅ 函数长度合理
- ✅ 命名规范清晰
- 💡 建议:提取魔法数字为常量
---
📁 **voc-frontend**:
变更文件:UserForm.vue, TestView.vue, router/index.ts, comment.ts, CommentView.vue
【安全审查】
- ✅ 未发现硬编码密码/密钥
- ✅ 未发现 SQL 注入风险
- ⚠️ TestView.vue:22 发现 console.log 调试代码
【Code Review】
- ⚠️ TestView.vue: 函数过长 (176 行),建议拆分
- ⚠️ TestForm.vue: 硬编码测试数据,建议移至 mock 文件
- 💡 建议:添加类型定义和注释
---
📁 **voc-backend**:
变更文件:11 个 Java 文件
【安全审查】
- ✅ 已清理多处 System.out.println 调试代码 👍
- ✅ 未发现硬编码密码/密钥
- ✅ 未发现 SQL 注入风险
- ✅ 未发现危险函数调用
【Code Review】
- ✅ 代码结构清晰
- ✅ 命名规范良好
- 💡 建议:添加单元测试
---
🚨 **风险汇总**:
- 🔴 高危:0 处
- 🟡 中危:2 处 (函数过长、测试数据硬编码)
- 🟢 低危:1 处 (console.log)
📈 **改动统计**:
- 总文件数:18
- 新增行数:+253
- 删除行数:-59
💡 **改进建议**:
1. 移除 TestView.vue 中的 console.log
2. 拆分 TestView.vue 中的长函数
3. 将测试数据移至 mock 文件
_Generated at {时间}_
时区: 使用 Asia/Shanghai (GMT+8)
日期计算: 报告的是 前一天 的提交(例如 23 号早上发 22 号的)
分支覆盖:
无更新处理: 如果项目/分支没有提交,显示「无更新」
错误处理: 如果仓库不存在或 git 命令失败,在报告中注明
代码审查:
git diff --name-only 获取变更文件列表通用 Code Review 重点:
依赖工具: 需要安装 ripgrep (rg) 进行代码搜索