Update from Sync Service
This commit is contained in:
465
wiki/AI工程/ClaudeCode开发全流程存档方案.md
Executable file
465
wiki/AI工程/ClaudeCode开发全流程存档方案.md
Executable file
@@ -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 开发全流程存档方案*
|
||||
Reference in New Issue
Block a user