Skip to content

Commit 65477be

Browse files
author
Hackercds
committed
docs: 加 git-workflow.md(main=框架 / 分支=项目约定)
明确双层模型: - main:vibe coding 起点模板(通用、可复用、对外) - feat/* / fix/*:本项目专属增量(不合并到 main) 包含: - 分支命名规范(feat/fix/chore/docs/experiment) - 三种典型场景(模板新增 / 项目增量 / main 同步 fix) - main 保护规则 - 常见误区(分支=多版本、必须合并等) - 30 秒决策树 本文件是框架文件,永久留在 main。
1 parent 6487411 commit 65477be

1 file changed

Lines changed: 205 additions & 0 deletions

File tree

docs/git-workflow.md

Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
# Git 工作流约定
2+
3+
> **本仓库的双层模型:`main` 维护框架基线,分支承载项目增量。**
4+
> 这不是 Git 官方约定——是本仓库**项目 + 模板**双重身份下的本地约定,团队内全员遵守。
5+
6+
---
7+
8+
## 一、双层模型(一图看明白)
9+
10+
```
11+
───────────── 上层 · 框架 ─────────────
12+
main 分支
13+
- 角色:vibe coding 起点模板(CLAUDE.md / AGENTS.md / materials / CI)
14+
- 稳定性:受保护,必须 PR 合并
15+
- 范围:通用、跨项目、可复用
16+
- 用户:clone 走本仓库 → 改占位符 → 起新项目的人
17+
18+
───────────── 下层 · 项目 ─────────────
19+
feat/* / fix/* / chore/* 分支
20+
- 角色:本项目的具体功能 / 实验 / 内部知识
21+
- 稳定性:自由演进
22+
- 范围:项目专属
23+
- 用户:本项目协作者
24+
25+
不合并(默认)。
26+
```
27+
28+
**为什么不合并到 main?**
29+
1. `main` 是"模板"——别人 clone 要的是空骨架,不要你的 todo-api wiki
30+
2. 项目内容是**本项目专属**(实体页 / 本地 spec),不是通用规则
31+
3. 框架 vs 项目的生命周期不同——升级模板不该被迫升级项目
32+
4. 强行合并 = 把"私有项目"污染进"公共模板"
33+
34+
---
35+
36+
## 二、分支命名规范
37+
38+
| 前缀 | 用途 | 示例 |
39+
|---|---|---|
40+
| `feat/` | 新能力 / 新模块 | `feat/llm-wiki` · `feat/oauth` |
41+
| `fix/` | bug 修复 | `fix/ci-import` · `fix/wiki-ask` |
42+
| `chore/` | 杂项(deps / 文档 / 重构) | `chore/bump-deps` · `chore/docs` |
43+
| `docs/` | 仅文档 | `docs/git-workflow`(本文) |
44+
| `experiment/` | 短期实验(不保证完成) | `experiment/agent-bench` |
45+
46+
**禁止**
47+
- ❌ 用人名 / 日期 / 内部代号命名(`zhangsan-test` ❌)
48+
- ❌ 长期存活(> 2 周)的"半成品"分支——拆小或删
49+
- ❌ 直接在 main 上工作
50+
51+
---
52+
53+
## 三、三种典型场景
54+
55+
### 场景 A · 给"模板"加新能力(合并到 main)
56+
57+
```
58+
新需求:模板新增一个 "RAG 检索" 能力
59+
60+
切到 main → git checkout main
61+
62+
新建分支 → git checkout -b feat/rag-template
63+
64+
在分支上改 CLAUDE.md / AGENTS.md / materials/ / CI(影响所有人的部分)
65+
66+
本地验证 → pytest / lint / CI
67+
68+
git push origin feat/rag-template
69+
70+
开 PR → main(标准审查流程)
71+
72+
合并 → 删除分支
73+
```
74+
75+
**判断标准**:你的改动是否**对所有 clone 这个仓库的人都有用**?是 → 走场景 A。
76+
77+
### 场景 B · 给"本项目"加东西(不合并,留分支)
78+
79+
```
80+
项目需求:写 todo-api 的 wiki 知识页
81+
82+
切到本项目的开发分支 → git checkout feat/llm-wiki
83+
84+
在分支上加 wiki/*.md / raw/ / scripts/
85+
86+
不碰 main 上的 CLAUDE.md / AGENTS.md / materials
87+
88+
git push origin feat/llm-wiki
89+
90+
不开 PR(默认) / 团队内 code review
91+
```
92+
93+
**判断标准**:你的改动**只对本项目有用**?是 → 走场景 B。
94+
95+
### 场景 C · 从 main 同步 bug fix 到项目分支
96+
97+
```
98+
main 上有人合并了 CI 修复
99+
100+
切到项目分支 → git checkout feat/llm-wiki
101+
102+
拉 main 的 fix → git cherry-pick <commit-hash>
103+
或 git merge main --no-ff
104+
105+
推项目分支 → git push origin feat/llm-wiki
106+
```
107+
108+
**何时需要**:项目分支依赖 main 的新能力 / bug fix 时。
109+
110+
---
111+
112+
## 四、保护规则(main 分支)
113+
114+
设置在 GitHub/GitLab 仓库设置里:
115+
116+
| 规则 | 推荐 |
117+
|---|---|
118+
| Require PR before merging ||
119+
| Require 1 approval | ✅(含 CODEOWNERS 自动路由) |
120+
| Dismiss stale approvals on push ||
121+
| Require status checks (CI 12 门) ||
122+
| Require linear history ||
123+
| Require signed commits | ✅(高敏项目) |
124+
| Restrict who can push | 仅 release bot / maintainer |
125+
| Allow force pushes ||
126+
| Allow deletions ||
127+
128+
---
129+
130+
## 五、常见误区
131+
132+
### 误区 1 · "分支 = 多个版本"
133+
134+
****。git branch 是**指向 commit 的指针**,不是"并行版本"。
135+
- main 和 feat/llm-wiki 是**两个指针**指向**不同的 commit**
136+
- 合并 = 把 A 的 commit **并入** B,B 拥有 A 的所有改动,**不会**出现"v1 v2 并行"
137+
- 分支生命周期内是独立空间,合并后归一
138+
139+
### 误区 2 · "必须合并才算数"
140+
141+
****。分支可以**长期存在**
142+
- LLM Wiki 这种"项目专属能力" → 留 `feat/llm-wiki`,长期维护
143+
- bug fix → 留 `fix/xxx` 直到上线验证后归档
144+
- 弃用 → 删分支(git branch -D)
145+
146+
### 误区 3 · "feature 分支必须合到 main"
147+
148+
****。这是 Git Flow 模型的"硬合并"假设。
149+
- GitHub Flow:每个 PR 都合并(适合小步快跑)
150+
- **本仓库约定**:按内容性质决定——**模板**合 main,**项目**留分支
151+
- 不要为了"流程正确"而把项目内容强塞 main
152+
153+
### 误区 4 · "分支太多难管理"
154+
155+
**缓解**
156+
- 分支名规范(按 §二),一眼看出在做什么
157+
- 长期分支 ≤ 3 个(多了就拆或合并到长期分支)
158+
- 删完成的临时分支(合并后默认删)
159+
-`git branch -a` + `git fetch --prune` 定期清理
160+
161+
---
162+
163+
## 六、与本仓库其他文件的关系
164+
165+
| 文件 | 内容 | 何时改 |
166+
|---|---|---|
167+
| `AGENTS.md` | 跨工具工程规则 | main 上改 |
168+
| `CLAUDE.md` | Claude 使用习惯 | main 上改 |
169+
| `README.md` | 项目入门 | main 上改 |
170+
| `materials/01-09` | 通用 SKILL | main 上改 |
171+
| `docs/git-workflow.md`(本文件) | 分支约定 | main 上改 |
172+
| `wiki/**` | 项目专属知识 | 项目分支上改(**不合并**|
173+
| `raw/**` | 项目原始资料 | 项目分支上改(**不合并**|
174+
| `scripts/wiki/**` | Wiki 工具脚本 | 项目分支上改(**不合并**|
175+
| `.github/workflows/wiki-ci.yml` | Wiki CI | 项目分支上改(**不合并**|
176+
177+
---
178+
179+
## 七、决策树(30 秒判断)
180+
181+
```
182+
我要加一个改动 X
183+
184+
├─ X 对所有 clone 这个仓库的人都有用?
185+
│ │
186+
│ ├─ 是 → 走场景 A(main 上 feat/ → PR → 合并)
187+
│ │
188+
│ └─ 否 → 走场景 B(在项目分支上改,不合并)
189+
190+
└─ 不确定?问自己:
191+
"X 改完了,README 需要加一句吗?"
192+
├─ 是 → 模板性质 → 场景 A
193+
└─ 否 → 项目性质 → 场景 B
194+
```
195+
196+
---
197+
198+
## 八、变更本文件
199+
200+
`docs/git-workflow.md`**框架文件**——只改 main 分支。
201+
PR 流程:本地改 → 跑 CI → 推 feat 分支 → 开 PR → 团队 review → 合 main。
202+
203+
---
204+
205+
> **一句话**:main 是给别人用的,分支是给自己用的。**合并不是义务,是工具**

0 commit comments

Comments
 (0)