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"]

配置优先级

  1. 命令行参数 (最高优先级)
  2. 配置文件
  3. 默认值

首次使用检测

运行 skill 时:

  1. 检查当前目录是否存在 .daily-note-config.yaml
  2. 如果不存在:
    • 提示用户: "检测到这是你第一次使用 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.pyconfig/ 识别配置调整
提示词变更 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. 不要假设只有 1 个提交: 实际工作中一天可能有多个提交
  2. diff 是主要信息源: commit message 可能遗漏细节
  3. 量化改动: 标注增删行数体现工作量
  4. 保持格式一致: 与现有日报格式对齐
Weekly Installs
2
GitHub Stars
3
First Seen
Today
Installed on
amp2
cline2
opencode2
cursor2
kimi-cli2
warp2