git-daily-note-updater
SKILL.md
Git 日报更新器
自动从 git 提交历史(包含 diff 分析)生成结构化的 Obsidian 日报内容。
📁 配置文件
文件位置
项目根目录: .daily-note-config.yaml
文件结构
# Daily Note Updater Configuration
# Generated by git-daily-note-updater skill
# 日报文件路径(必填)
daily_note_path: /path/to/your/Daily Note.md
# 工作仓库列表(可选)
# 不配置则默认为当前目录
repos:
- /path/to/repo1
- /path/to/repo2
# 自定义类别(可选)
# 不配置则使用默认类别
categories:
- name: 【安全加固】
patterns: ["security", "auth", "permission"]
配置优先级
- 命令行参数 (最高优先级)
- 配置文件
- 默认值
首次使用检测
运行 skill 时:
- 检查当前目录是否存在
.daily-note-config.yaml - 如果不存在:
- 提示用户: "检测到这是你第一次使用 git-daily-note-updater skill。请提供日报文件路径来创建配置文件:"
- 创建配置文件
- 保存到
.daily-note-config.yaml
⚠️ 常见错误与防错机制
错误 1:遗漏提交
错误表现: 只获取了最新的 1 个提交,漏掉当天其他提交
错误原因: 使用 --no-walk=unsorted 或只查看最新提交
正确做法:
# ❌ 错误:可能只返回部分提交
git log --since="..." --no-walk=unsorted
# ✅ 正确:获取指定日期的所有提交
git log --since="<date> 00:00:00" --until="<date> 23:59:59" --pretty=format:"%h %s"
防错检查清单:
- 确认获取的提交数量是否合理
- 对比 reflog 确认没有遗漏
- 检查是否有
--no-walk参数并移除
错误 2:只分析 commit message,忽略 diff
错误表现: 日报内容过于简略,遗漏配置变更、细节改动
错误原因: 仅读取 commit message 和 body,未获取 diff
正确做法:
# 必须获取每个提交的 diff
git show <commit_hash> --stat # 文件变更统计
git show <commit_hash> --format="" # 完整 diff
防错检查清单:
- 每个提交都获取了 --stat 和 diff
- 检查配置文件变更(*_manager.py, default.yaml)
- 检查 schema 变更(schemas/ 目录)
- 量化改动规模(+N/-M 行)
错误 3:分类不准确
正确做法: 使用智能分类系统
分类优先级:
| 优先级 | 类别 | 触发条件 |
|---|---|---|
| 1 | 【用户自定义】 | 配置文件中定义的自定义类别 |
| 2 | 【能力升级】 | feat, enhance, add, new, implement |
| 3 | 【问题定位】 | fix, bug, resolve, repair, patch |
| 4 | 【结构变更】 | refactor, restructure, reorg, migrate |
| 5 | 【配置调整】 | config, setting, env, manager |
| 6 | 【文档优化】 | docs, doc, readme, comment |
| 7 | 【测试覆盖】 | test, spec, coverage |
| 8 | 【其他更新】 | 以上都不匹配时 |
分类逻辑:
For each commit:
1. 检查用户自定义类别(如果配置了)
2. 如果不匹配,检查默认类别
3. 如果仍不匹配,使用 "【其他更新】"
自定义类别示例:
如果用户配置了:
categories:
- name: 【安全加固】
patterns: ["security", "auth", "permission"]
则 commit message "feat(auth): add JWT support" 匹配:
- 自定义类别 "【安全加固】" (模式 "auth")
- 结果: 【安全加固】 JWT 认证功能
🚨 常见合理化借口(必须避免)
| 借口 | 现实 |
|---|---|
| "时间紧迫,diff 会增加太多信息量" | diff 是主要信息源,commit message 常遗漏细节。跳过 = 日报不完整。 |
| "生成日报通常只需要 commit message" | commit message 可能遗漏配置变更、schema 变更等关键信息。 |
| "只有一个提交,不需要详细分析" | 即使一个提交,diff 也可能包含多个文件的重要变更。 |
| "用户没要求看 diff" | skill 要求必须分析 diff,这不是可选项。 |
| "commit message 已经很详细了" | message 描述意图,diff 描述实际变更。两者都需要。 |
🔴 红旗列表 - 遇到这些想法时立即停止
- "用户说时间紧迫,我简化一下"
- "只看 commit message 应该够了"
- "diff 太长了,跳过吧"
- "这个提交看起来很简单"
- "我先用简单命令快速完成"
出现以上任何想法 = 你正在跳过关键步骤。必须完整执行 diff 分析。
工作流程
Step 1: 加载配置
1.1 检测配置文件
# 检查配置文件是否存在
cat .daily-note-config.yaml 2>/dev/null
1.2 如果配置文件不存在(首次使用)
提示用户:
"检测到这是你第一次使用 git-daily-note-updater skill。
请提供以下信息来创建配置文件:
1. 日报文件路径(必填): 例如 /Users/xxx/Obsidian/Daily Note.md
2. 工作仓库列表(可选,一行一个,空行结束):"
1.3 读取配置参数
| 参数 | 来源 | 默认值 |
|---|---|---|
daily_note_path |
配置文件或用户输入 | - |
repos |
配置文件或用户输入 | 当前目录 |
date |
命令行或用户指定 | 今天 (YYYY-MM-DD) |
Step 2: 获取多仓库提交历史
对每个仓库执行:
# 2.1 获取提交列表
cd <repo_path>
git log --since="<date> 00:00:00" --until="<date> 23:59:59" --pretty=format:"%h %s"
# 2.2 交叉验证
git reflog --since="<date> 00:00:00" | head -50
# 2.3 统计提交数量
# 确认获取的提交数量与预期一致
合并所有仓库的提交信息进行分析。
Step 3: 获取每个提交的完整信息
对每个提交执行以下命令:
# 3.1 提交消息
git log -1 --format="%s%n%b" <commit_hash>
# 3.2 文件变更统计(必须)
git show <commit_hash> --stat --format=""
# 3.3 完整 diff(必须)
git show <commit_hash> --format=""
Step 4: Diff 分析(关键步骤)
必须从 diff 中提取以下信息:
| diff 信息 | 提取方法 | 用途 |
|---|---|---|
| 修改文件路径 | --stat 输出 |
判断影响模块 |
| 增删行数 | --stat 输出的 +N/-M |
量化改动规模 |
| Schema 变更 | diff 中 schemas/ 文件 |
识别模型字段变更 |
| 配置变更 | diff 中 *_manager.py、config/ |
识别配置调整 |
| 提示词变更 | diff 中 prompts/ 文件 |
识别提示词优化 |
Step 5: 分类整理
根据 diff + commit message,按优先级分类:
【用户自定义】← 配置文件中定义的自定义类别
【能力升级】← feat, enhance, 新增功能代码
【问题定位】← fix, bug, 错误处理增强
【结构变更】← refactor, 代码/提示词重构
【配置调整】← 配置文件、manager 变更
【文档优化】← 纯文档变更
【测试覆盖】← 测试相关变更
【其他更新】← 以上都不匹配
Step 6: 生成日报内容
单仓库输出:
### YYYY.MM.DD
- [项目名称]
- {子项目}
- 【类别1】
- [x] 功能描述(+N/-M 行)
- 详细说明1(来自 diff)
- 详细说明2
多仓库合并输出:
### YYYY.MM.DD
- [项目A]
- {模块}
- 【能力升级】
- [x] 功能描述(+N/-M 行)
- 详细说明
- [项目B]
- {模块}
- 【问题定位】
- [x] 修复描述(+N/-M 行)
- 详细说明
执行检查清单
在完成日报更新前,必须确认:
配置检查:
- 配置文件存在或已创建
- 日报文件路径有效
- 仓库列表正确(如果配置了)
提交分析检查:
- 获取了所有当天提交(不是只有最新一个)
- 使用 reflog 交叉验证无遗漏
- 每个提交都获取了完整 diff
- 量化了改动规模(+N/-M 行)
- 识别了所有 schema 变更
- 识别了所有配置变更
分类检查:
- 自定义类别正确应用(如果配置了)
- 分类准确,无遗漏类别
- 日报格式与现有格式一致
示例
输入: 8 个提交
| Hash | Message | Files Changed |
|---|---|---|
| 1aa102c | refactor(reference): Update screenplay format spec | reference/*.md, template_manager.py |
| 6ced6f6 | refactor(prompts): Revise character extraction | prompts/*.j2, schemas/canonical.py |
| 1a1725d | feat(async): Implement retry logic | src/core/*.py |
| ... | ... | ... |
输出:
- [x] LLM 调用异步重试机制(+113/-34 行)
- 场景分析、叙事时间线、角色提取三个核心模块添加重试逻辑
- 支持配置最大重试次数和退避时间
- [x] 角色提取能力重构(+56/-25 行)
- CharacterProfile schema 新增 role 字段
- 重构 appearance 和 costume 字段结构
注意事项
- 不要假设只有 1 个提交: 实际工作中一天可能有多个提交
- diff 是主要信息源: commit message 可能遗漏细节
- 量化改动: 标注增删行数体现工作量
- 保持格式一致: 与现有日报格式对齐
Weekly Installs
2
Repository
kkenny0/git-dai…er-skillGitHub Stars
3
First Seen
Today
Security Audits
Installed on
amp2
cline2
opencode2
cursor2
kimi-cli2
warp2