diff --git a/wiki/AI工程/ClaudeCode开发全流程存档方案.md b/wiki/AI工程/ClaudeCode开发全流程存档方案.md new file mode 100755 index 0000000..983792e --- /dev/null +++ b/wiki/AI工程/ClaudeCode开发全流程存档方案.md @@ -0,0 +1,465 @@ +--- +created: 2026-05-04 +type: workflow +tags: [Claude Code, Git, Obsidian, 开发流程, 存档, 自动化] +--- + +# Claude Code 开发全流程存档方案 + +> 每步提交 Git + 全程存档 Obsidian,打造可追溯的 AI 开发工作流 +> 归档时间:2026-05-04 + +--- + +## 📌 目标 + +1. Claude Code **每完成一个开发步骤**,自动提交 Git +2. 整个开发过程(对话 + 代码变更 + 决策)**实时存档到 Obsidian** +3. 形成**可回溯、可搜索、可复盘**的 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` 中写入指令: + +```markdown +# CLAUDE.md - 项目级 Claude Code 指令 + +## 开发流程要求 + +每次完成代码修改后,必须执行以下操作: + +1. **git add + commit**: + ```bash + git add -A + git commit -m "[AI-Step] {简短描述}" + ``` + +2. **记录开发日志**: + - 用 `obs` 命令写入 Obsidian 开发日志 + - 格式:`obs obs今天日记 {内容}` + +3. **commit message 规范**: + - `[AI-Step]` - 普通开发步骤 + - `[AI-Fix]` - Bug 修复 + - `[AI-Feature]` - 新功能 + - `[AI-Refactor]` - 重构 + - `[AI-Test]` - 测试相关 + +## 示例 + +用户:帮我修复这个登录 Bug +Claude: +1. 分析问题... +2. 修改 auth.js... +3. git add -A && git commit -m "[AI-Fix] 修复登录 token 过期问题" +4. 记录到开发日志... +``` + +#### 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 + +```bash +cd /path/to/your/project +chmod +x .git/hooks/post-commit +``` + +--- + +### 方案二:完整对话导出 + 存档 + +#### 1. Claude Code 对话导出 + +```bash +# 方式 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 命令直接写入 + +```bash +# 每次开发步骤完成后 +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 模板:开发日志 + +```markdown +<%* +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 +└── ... +``` + +--- + +## ⚡ 一键初始化脚本 + +```bash +#!/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. 生成开发报告 + +```bash +# 查看某天所有 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: + +```markdown +## 代码变更 + +- `[commit:abc1234](https://github.com/user/repo/commit/abc1234)` - 修复登录问题 +- `[commit:def5678](https://github.com/user/repo/commit/def5678)` - 添加单元测试 +``` + +### 3. 复盘笔记模板 + +```markdown +# 项目复盘 - {{项目名}} + +## 时间线 +- 开始:{{日期}} +- 结束:{{日期}} +- 总 commit 数:`git log --oneline | wc -l` + +## 关键决策 + +## 踩坑记录 + +## 经验教训 + +## 可复用代码/模式 +``` + +--- + +*研究归档,2026-05-04 | Claude Code 开发全流程存档方案*