10 KiB
Executable File
10 KiB
Executable File
created, type, tags
| created | type | tags | ||||||
|---|---|---|---|---|---|---|---|---|
| 2026-05-04 | workflow |
|
Claude Code 开发全流程存档方案
每步提交 Git + 全程存档 Obsidian,打造可追溯的 AI 开发工作流 归档时间:2026-05-04
📌 目标
- Claude Code 每完成一个开发步骤,自动提交 Git
- 整个开发过程(对话 + 代码变更 + 决策)实时存档到 Obsidian
- 形成可回溯、可搜索、可复盘的 AI 开发知识库
🏗️ 整体架构
Claude Code (开发)
│
├── 1. 每步完成后 → git commit (自动)
│ │
│ └── commit message 包含步骤描述
│
├── 2. 对话记录 → 导出 Markdown → Obsidian (自动)
│ │
│ └── 按项目/日期归档
│
├── 3. 代码变更 → git diff → 存档笔记 (自动)
│ │
│ └── 记录"改了什么 + 为什么改"
│
└── 4. 开发日志 → 每日汇总笔记 → Obsidian (自动)
│
└── 包含决策、踩坑、复盘
🔧 工具清单
| 工具 | 用途 | 必选 |
|---|---|---|
| Git | 代码版本控制 | ✅ |
| Claude Code | AI 编码助手 | ✅ |
| Obsidian | 知识库管理 | ✅ |
| obs(obsidian-headless CLI) | 命令行写 Obsidian 笔记 | ✅ |
| pre-commit | Git 钩子,自动触发存档 | ⚠️ 可选 |
| git-changelog | 生成变更日志 | ⚠️ 可选 |
Claude Code 的 --output-format json |
结构化对话输出 | ✅ |
📋 实施方案
方案一:Claude Code + Git 自动提交(推荐)
1. Claude Code 配置
在项目的 CLAUDE.md 中写入指令:
# CLAUDE.md - 项目级 Claude Code 指令
## 开发流程要求
每次完成代码修改后,必须执行以下操作:
1. **git add + commit**:
```bash
git add -A
git commit -m "[AI-Step] {简短描述}"
-
记录开发日志:
- 用
obs命令写入 Obsidian 开发日志 - 格式:
obs obs今天日记 {内容}
- 用
-
commit message 规范:
[AI-Step]- 普通开发步骤[AI-Fix]- Bug 修复[AI-Feature]- 新功能[AI-Refactor]- 重构[AI-Test]- 测试相关
示例
用户:帮我修复这个登录 Bug Claude:
- 分析问题...
- 修改 auth.js...
- git add -A && git commit -m "[AI-Fix] 修复登录 token 过期问题"
- 记录到开发日志...
#### 2. Git Hook 自动存档
在项目 `.git/hooks/post-commit` 中添加:
```bash
#!/bin/bash
# post-commit 钩子:每次 commit 后自动存档到 Obsidian
COMMIT_MSG=$(git log -1 --pretty=%B)
COMMIT_HASH=$(git log -1 --pretty=%h)
COMMIT_DATE=$(git log -1 --pretty=%ci)
CHANGED_FILES=$(git diff-tree --no-commit-id --name-only -r HEAD)
# 获取变更统计
STATS=$(git diff --stat HEAD~1 HEAD 2>/dev/null || echo "Initial commit")
# 写入 Obsidian 开发日志
TODAY=$(date +%Y-%m-%d)
LOG_DIR="/obsidian/开发日志/${TODAY}"
mkdir -p "$LOG_DIR"
# 追加到今日开发日志
cat >> "$LOG_DIR/开发日志.md" << EOF
### $(date +%H:%M) - ${COMMIT_MSG}
- **Commit**: \`${COMMIT_HASH}\`
- **时间**: ${COMMIT_DATE}
- **变更文件**:
$(echo "$CHANGED_FILES" | sed 's/^/ - /')
- **变更统计**:
\`\`\`
${STATS}
\`\`\`
---
EOF
echo "✅ 已存档到 Obsidian: $LOG_DIR/开发日志.md"
3. 启用 Git Hook
cd /path/to/your/project
chmod +x .git/hooks/post-commit
方案二:完整对话导出 + 存档
1. Claude Code 对话导出
# 方式 A:使用 Claude Code 内置导出
claude export --output json > /tmp/claude-session.json
# 方式 B:直接从数据库导出
python3 << 'PYEOF'
import sqlite3
import json
import os
from datetime import datetime
DB_PATH = os.path.expanduser("~/.claude/conversations.db")
OBSIDIAN_PATH = "/obsidian/ClaudeCode开发日志/"
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
# 获取最新会话
cursor = conn.cursor()
cursor.execute("""
SELECT * FROM conversations ORDER BY updated_at DESC LIMIT 1
""")
conv = cursor.fetchone()
# 获取消息
cursor.execute("""
SELECT * FROM messages WHERE conversation_id = ? ORDER BY created_at ASC
""", (conv['id'],))
messages = cursor.fetchall()
# 生成 Markdown
today = datetime.now().strftime('%Y-%m-%d')
filename = f"{today}-{conv['title'] or 'session'}.md"
filepath = os.path.join(OBSIDIAN_PATH, filename)
os.makedirs(OBSIDIAN_PATH, exist_ok=True)
with open(filepath, 'w', encoding='utf-8') as f:
f.write(f"# {conv['title']}\n\n")
f.write(f"> 日期:{today}\n\n")
f.write("---\n\n")
for msg in messages:
role = "🤖 Claude" if msg['role'] == 'assistant' else "👤 我"
f.write(f"### {role}\n\n")
f.write(f"{msg['content']}\n\n")
f.write("---\n\n")
print(f"✅ 已导出: {filepath}")
conn.close()
PYEOF
2. 用 obs 命令直接写入
# 每次开发步骤完成后
obs obs今天日记 "完成了用户模块开发,git commit: [AI-Feature] 添加用户注册接口"
# 或者创建专题笔记
obs obs创建笔记 "用户模块开发记录" "
## 用户需求
- 支持手机号注册
- 支持邮箱验证
- 密码加密存储
## 实现过程
1. 设计数据库 schema
2. 编写 API 接口
3. 添加单元测试
4. 修复 CORS 问题
## 关键决策
- 选择 bcrypt 而非 md5 加密
- 使用 JWT 而非 session
## 踩坑
- Redis 连接池未关闭导致内存泄漏
- CORS 配置遗漏
"
方案三:Obsidian 插件配合
必装插件
| 插件 | 作用 |
|---|---|
| Templater | 自动填充开发日志模板 |
| Dataview | 按标签/日期查询开发记录 |
| Git | Obsidian vault 自动同步 Git |
| Calendar | 日历视图查看每日开发记录 |
| QuickAdd | 快速创建开发笔记 |
Templater 模板:开发日志
<%*
const today = tp.date.now("YYYY-MM-DD");
const project = await tp.system.prompt("项目名称");
const task = await tp.system.prompt("本次任务");
%>
# 开发日志 - <%= today %>
## 项目:<%= project %>
### 任务:<%= task %>
**开始时间**:<% tp.date.now("HH:mm") %>
**结束时间**:
---
## 开发过程
### 步骤 1:
**Git Commit**:`[AI-Step] `
**变更内容**:
**遇到问题**:
**解决方案**:
---
## 复盘总结
### 做得好的:
### 需要改进的:
### 下次注意:
---
## Git 变更记录
```bash
git log --oneline --since="<%= today %> 00:00" --until="<%= today %> 23:59"
<% tp.date.now("YYYY-MM-DD HH:mm:ss") %> 记录
#### Dataview 查询:按项目查看开发记录
```dataview
TABLE 项目, 任务, file.ctime as "创建时间"
FROM "开发日志"
WHERE 项目 != null
SORT file.ctime DESC
🔄 完整工作流示例
用户:帮我开发一个用户管理模块
↓
Claude Code:
1. 分析需求,创建文件
2. git add -A && git commit -m "[AI-Step] 初始化用户模块"
↓
post-commit 钩子触发:
→ 写入 Obsidian 开发日志
→ 记录变更文件列表
↓
Claude Code:
3. 编写 API 接口
4. git add -A && git commit -m "[AI-Feature] 添加用户注册/登录 API"
↓
post-commit 钩子触发:
→ 追加到 Obsidian 开发日志
→ 记录 diff 统计
↓
... 循环直到完成
最终:Obsidian 中有完整的开发过程记录
Git 中有每步的代码变更
📂 Obsidian 目录结构
/obsidian/开发日志/
├── 2026-05-04/
│ ├── 开发日志.md # 当日汇总
│ ├── 用户模块开发记录.md # 专题笔记
│ └── 数据库设计记录.md
├── 2026-05-05/
│ └── ...
└── _templates/
└── 开发日志模板.md
/obsidian/ClaudeCode对话/
├── 2026-05-04-用户模块开发.md
├── 2026-05-04-Bug修复记录.md
└── ...
⚡ 一键初始化脚本
#!/bin/bash
# setup-dev-workflow.sh - 一键配置开发存档工作流
PROJECT_DIR=$1
if [ -z "$PROJECT_DIR" ]; then
echo "用法: ./setup-dev-workflow.sh /path/to/project"
exit 1
fi
cd "$PROJECT_DIR"
# 1. 创建 CLAUDE.md
cat > CLAUDE.md << 'EOF'
# 开发流程要求
- 每完成一个步骤,执行 git add -A && git commit -m "[AI-Step] 描述"
- 用 obs 命令记录开发日志
- commit 前缀:[AI-Step] [AI-Fix] [AI-Feature] [AI-Refactor] [AI-Test]
EOF
# 2. 创建 Git Hook
mkdir -p .git/hooks
cat > .git/hooks/post-commit << 'HOOK'
#!/bin/bash
COMMIT_MSG=$(git log -1 --pretty=%B)
COMMIT_HASH=$(git log -1 --pretty=%h)
CHANGED=$(git diff-tree --no-commit-id --name-only -r HEAD)
TODAY=$(date +%Y-%m-%d)
LOG="/obsidian/开发日志/${TODAY}"
mkdir -p "$LOG"
echo "### $(date +%H:%M) | \`${COMMIT_HASH}\` | ${COMMIT_MSG}" >> "$LOG/开发日志.md"
echo " 文件: $(echo $CHANGED | tr '\n' ', ')" >> "$LOG/开发日志.md"
echo "---" >> "$LOG/开发日志.md"
HOOK
chmod +x .git/hooks/post-commit
# 3. 创建 Obsidian 目录
mkdir -p /obsidian/开发日志/_templates
mkdir -p /obsidian/ClaudeCode对话
echo "✅ 开发存档工作流已配置!"
echo " - CLAUDE.md: $PROJECT_DIR/CLAUDE.md"
echo " - Git Hook: $PROJECT_DIR/.git/hooks/post-commit"
echo " - Obsidian: /obsidian/开发日志/"
💡 进阶技巧
1. 生成开发报告
# 查看某天所有 commit
git log --oneline --since="2026-05-04" --until="2026-05-05"
# 统计代码变更量
git log --since="2026-05-04" --pretty=format: --stat | tail -1
# 生成变更日志
git log --oneline --graph --all > /obsidian/开发日志/变更日志.md
2. 自动关联 Git 与 Obsidian
在 Obsidian 笔记中嵌入 Git commit:
## 代码变更
- `[commit:abc1234](https://github.com/user/repo/commit/abc1234)` - 修复登录问题
- `[commit:def5678](https://github.com/user/repo/commit/def5678)` - 添加单元测试
3. 复盘笔记模板
# 项目复盘 - {{项目名}}
## 时间线
- 开始:{{日期}}
- 结束:{{日期}}
- 总 commit 数:`git log --oneline | wc -l`
## 关键决策
## 踩坑记录
## 经验教训
## 可复用代码/模式
研究归档,2026-05-04 | Claude Code 开发全流程存档方案