Files
chill_notes/wiki/AI工程/ClaudeCode开发全流程存档方案.md
2026-05-04 11:02:13 +08:00

466 lines
10 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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** | 知识库管理 | ✅ |
| **obsobsidian-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 开发全流程存档方案*