@zjex/git-workflow 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,538 @@
1
+ # 团队协作
2
+
3
+ 本指南介绍如何在团队中使用 git-workflow,统一工作流程和规范。
4
+
5
+ ## 为什么需要统一工作流?
6
+
7
+ 在团队开发中,统一的 Git 工作流可以:
8
+
9
+ - ✅ 提高代码审查效率
10
+ - ✅ 减少合并冲突
11
+ - ✅ 保持提交历史清晰
12
+ - ✅ 便于追踪问题和功能
13
+ - ✅ 自动化发布流程
14
+
15
+ ## 团队配置策略
16
+
17
+ ### 配置层级
18
+
19
+ git-workflow 支持三个配置层级:
20
+
21
+ 1. **全局配置**(`~/.gwrc.json`)- 个人偏好设置
22
+ 2. **项目配置**(`.gwrc.json`)- 团队统一规范
23
+ 3. **运行时配置** - 临时覆盖
24
+
25
+ 优先级:运行时 > 项目 > 全局
26
+
27
+ ### 推荐配置方案
28
+
29
+ #### 方案 1: 项目配置(推荐)
30
+
31
+ 在项目根目录创建 `.gwrc.json`,提交到 Git:
32
+
33
+ ```json
34
+ {
35
+ "branch": {
36
+ "types": ["feature", "hotfix", "bugfix"],
37
+ "baseBranch": "main",
38
+ "includeDate": true,
39
+ "includeStoryId": true,
40
+ "storyIdRequired": false
41
+ },
42
+ "commit": {
43
+ "useAI": false,
44
+ "format": "conventional",
45
+ "useGitmoji": true
46
+ },
47
+ "tag": {
48
+ "prefix": "v",
49
+ "prerelease": ["alpha", "beta", "rc"]
50
+ }
51
+ }
52
+ ```
53
+
54
+ **优点:**
55
+
56
+ - 团队成员自动使用统一配置
57
+ - 配置随项目版本管理
58
+ - 新成员无需额外配置
59
+
60
+ **适用场景:**
61
+
62
+ - 中大型团队
63
+ - 多个项目需要不同规范
64
+ - 需要严格的工作流控制
65
+
66
+ #### 方案 2: 全局配置 + 项目覆盖
67
+
68
+ 团队成员各自配置全局设置,项目中只覆盖必要的规范:
69
+
70
+ ```json
71
+ // 项目 .gwrc.json(只配置团队规范)
72
+ {
73
+ "branch": {
74
+ "baseBranch": "main",
75
+ "includeStoryId": true
76
+ },
77
+ "commit": {
78
+ "format": "conventional"
79
+ }
80
+ }
81
+ ```
82
+
83
+ **优点:**
84
+
85
+ - 灵活性高
86
+ - 个人可以自定义偏好
87
+ - 项目配置简洁
88
+
89
+ **适用场景:**
90
+
91
+ - 小型团队
92
+ - 成员有不同的工作习惯
93
+ - 只需统一核心规范
94
+
95
+ ## 分支管理规范
96
+
97
+ ### 分支命名规范
98
+
99
+ 统一的分支命名格式:
100
+
101
+ ```
102
+ <type>/<date>-<story-id>-<description>
103
+ ```
104
+
105
+ 示例:
106
+
107
+ ```
108
+ feature/20260116-PROJ-123-user-login
109
+ hotfix/20260116-BUG-456-fix-crash
110
+ bugfix/20260116-fix-memory-leak
111
+ ```
112
+
113
+ ### 分支类型定义
114
+
115
+ 在项目配置中定义团队使用的分支类型:
116
+
117
+ ```json
118
+ {
119
+ "branch": {
120
+ "types": ["feature", "hotfix", "bugfix", "refactor"],
121
+ "baseBranch": "main"
122
+ }
123
+ }
124
+ ```
125
+
126
+ ### 分支工作流
127
+
128
+ #### Git Flow 风格
129
+
130
+ ```
131
+ main (生产)
132
+ ├── develop (开发)
133
+ │ ├── feature/xxx (功能)
134
+ │ ├── feature/yyy (功能)
135
+ │ └── bugfix/zzz (修复)
136
+ └── hotfix/aaa (紧急修复)
137
+ ```
138
+
139
+ 配置:
140
+
141
+ ```json
142
+ {
143
+ "branch": {
144
+ "baseBranch": "develop",
145
+ "types": ["feature", "bugfix", "hotfix"]
146
+ }
147
+ }
148
+ ```
149
+
150
+ #### GitHub Flow 风格
151
+
152
+ ```
153
+ main (生产)
154
+ ├── feature/xxx
155
+ ├── feature/yyy
156
+ └── hotfix/zzz
157
+ ```
158
+
159
+ 配置:
160
+
161
+ ```json
162
+ {
163
+ "branch": {
164
+ "baseBranch": "main",
165
+ "types": ["feature", "hotfix"]
166
+ }
167
+ }
168
+ ```
169
+
170
+ ## 提交规范
171
+
172
+ ### Conventional Commits
173
+
174
+ 团队统一使用 Conventional Commits 规范:
175
+
176
+ ```
177
+ <type>(<scope>): <subject>
178
+
179
+ <body>
180
+
181
+ <footer>
182
+ ```
183
+
184
+ ### 提交类型
185
+
186
+ 在项目中统一提交类型:
187
+
188
+ | 类型 | 说明 | 示例 |
189
+ | -------- | --------- | ------------------------------- |
190
+ | feat | 新功能 | `feat(auth): 添加用户登录` |
191
+ | fix | 修复 bug | `fix(api): 修复数据获取错误` |
192
+ | docs | 文档更新 | `docs: 更新 README` |
193
+ | style | 代码格式 | `style: 格式化代码` |
194
+ | refactor | 重构 | `refactor(utils): 优化工具函数` |
195
+ | test | 测试 | `test: 添加单元测试` |
196
+ | chore | 构建/工具 | `chore: 更新依赖` |
197
+ | perf | 性能优化 | `perf: 优化查询性能` |
198
+
199
+ ### AI 提交配置
200
+
201
+ #### 团队共享 AI 配置
202
+
203
+ 如果团队使用 AI 生成提交消息,可以配置团队共享的 API:
204
+
205
+ ```json
206
+ {
207
+ "commit": {
208
+ "useAI": true,
209
+ "ai": {
210
+ "provider": "github",
211
+ "model": "gpt-4o",
212
+ "customPrompt": "请生成符合团队规范的提交消息..."
213
+ }
214
+ }
215
+ }
216
+ ```
217
+
218
+ #### 个人 API Key
219
+
220
+ API Key 应该在个人全局配置中设置,不要提交到项目:
221
+
222
+ ```bash
223
+ # 每个成员运行
224
+ gw init
225
+ # 选择 "全局配置"
226
+ # 配置个人的 API Key
227
+ ```
228
+
229
+ ## 版本管理规范
230
+
231
+ ### 语义化版本
232
+
233
+ 团队统一使用语义化版本:
234
+
235
+ ```
236
+ v<major>.<minor>.<patch>[-<prerelease>]
237
+ ```
238
+
239
+ 示例:
240
+
241
+ - `v1.0.0` - 正式版本
242
+ - `v1.1.0-alpha.1` - 预发布版本
243
+ - `v2.0.0-beta.2` - 测试版本
244
+
245
+ ### 版本发布流程
246
+
247
+ #### 1. 开发阶段
248
+
249
+ ```bash
250
+ # 创建功能分支
251
+ gw f
252
+ # 输入: PROJ-123, add-payment
253
+
254
+ # 开发并提交
255
+ gw c
256
+
257
+ # 推送到远程
258
+ git push origin feature/20260116-PROJ-123-add-payment
259
+ ```
260
+
261
+ #### 2. 代码审查
262
+
263
+ ```bash
264
+ # 创建 Pull Request
265
+ # 等待 review 和测试通过
266
+ # 合并到 main/develop
267
+ ```
268
+
269
+ #### 3. 发布版本
270
+
271
+ ```bash
272
+ # 切换到主分支
273
+ git checkout main
274
+ git pull
275
+
276
+ # 创建版本 tag
277
+ gw t
278
+ # 选择版本类型: patch/minor/major
279
+
280
+ # 推送 tag
281
+ git push --tags
282
+ ```
283
+
284
+ #### 4. 自动化发布
285
+
286
+ 配置 CI/CD 在 tag 推送时自动发布:
287
+
288
+ ```yaml
289
+ # .github/workflows/release.yml
290
+ name: Release
291
+ on:
292
+ push:
293
+ tags:
294
+ - "v*"
295
+ jobs:
296
+ release:
297
+ runs-on: ubuntu-latest
298
+ steps:
299
+ - uses: actions/checkout@v3
300
+ - name: Build and Deploy
301
+ run: |
302
+ npm install
303
+ npm run build
304
+ npm publish
305
+ ```
306
+
307
+ ## 团队最佳实践
308
+
309
+ ### 1. 统一开发环境
310
+
311
+ 确保团队成员使用相同的工具版本:
312
+
313
+ ```json
314
+ // package.json
315
+ {
316
+ "engines": {
317
+ "node": ">=18.0.0",
318
+ "npm": ">=9.0.0"
319
+ }
320
+ }
321
+ ```
322
+
323
+ ### 2. 代码审查流程
324
+
325
+ 建立规范的 PR 流程:
326
+
327
+ 1. 创建功能分支
328
+ 2. 完成开发和测试
329
+ 3. 提交 PR,填写完整描述
330
+ 4. 至少 1 人 review
331
+ 5. CI 测试通过
332
+ 6. 合并到主分支
333
+
334
+ ### 3. 提交频率
335
+
336
+ 建议:
337
+
338
+ - ✅ 小步提交,频繁推送
339
+ - ✅ 每个提交只做一件事
340
+ - ✅ 提交信息清晰描述改动
341
+ - ❌ 避免大量代码一次提交
342
+ - ❌ 避免提交未完成的功能
343
+
344
+ ### 4. 分支管理
345
+
346
+ 建议:
347
+
348
+ - ✅ 及时删除已合并的分支
349
+ - ✅ 定期同步主分支
350
+ - ✅ 功能分支不要存在太久
351
+ - ❌ 避免在主分支直接提交
352
+ - ❌ 避免长期存在的功能分支
353
+
354
+ ### 5. 冲突处理
355
+
356
+ 遇到合并冲突时:
357
+
358
+ ```bash
359
+ # 1. 更新主分支
360
+ git checkout main
361
+ git pull
362
+
363
+ # 2. 切回功能分支
364
+ git checkout feature/xxx
365
+
366
+ # 3. 合并主分支
367
+ git merge main
368
+
369
+ # 4. 解决冲突
370
+ # 编辑冲突文件
371
+
372
+ # 5. 提交合并
373
+ git add .
374
+ git commit -m "chore: 解决合并冲突"
375
+
376
+ # 6. 推送
377
+ git push
378
+ ```
379
+
380
+ ## 团队培训
381
+
382
+ ### 新成员入职
383
+
384
+ 1. **安装工具**
385
+
386
+ ```bash
387
+ npm install -g @zjex/git-workflow
388
+ ```
389
+
390
+ 2. **配置全局设置**
391
+
392
+ ```bash
393
+ gw init
394
+ # 选择 "全局配置"
395
+ # 配置 AI API Key(如果使用)
396
+ ```
397
+
398
+ 3. **克隆项目**
399
+
400
+ ```bash
401
+ git clone <project-url>
402
+ cd <project>
403
+ ```
404
+
405
+ 4. **查看项目配置**
406
+
407
+ ```bash
408
+ gw config
409
+ ```
410
+
411
+ 5. **开始开发**
412
+
413
+ ```bash
414
+ # 创建分支
415
+ gw f
416
+
417
+ # 提交代码
418
+ gw c
419
+
420
+ # 查看日志
421
+ gw log
422
+ ```
423
+
424
+ ### 培训材料
425
+
426
+ 准备团队培训文档:
427
+
428
+ 1. **快速开始指南** - 5 分钟上手
429
+ 2. **工作流规范** - 分支、提交、发布流程
430
+ 3. **常见问题** - FAQ 和解决方案
431
+ 4. **最佳实践** - 团队约定和建议
432
+
433
+ ## 常见场景
434
+
435
+ ### 场景 1: 多人协作同一功能
436
+
437
+ ```bash
438
+ # 成员 A 创建功能分支
439
+ gw f
440
+ # feature/20260116-PROJ-123-payment
441
+
442
+ # 成员 B 基于该分支创建子分支
443
+ git checkout feature/20260116-PROJ-123-payment
444
+ git checkout -b feature/20260116-PROJ-123-payment-ui
445
+
446
+ # 各自开发并提交
447
+ gw c
448
+
449
+ # 成员 B 先合并到功能分支
450
+ git checkout feature/20260116-PROJ-123-payment
451
+ git merge feature/20260116-PROJ-123-payment-ui
452
+
453
+ # 功能完成后合并到主分支
454
+ ```
455
+
456
+ ### 场景 2: 紧急修复
457
+
458
+ ```bash
459
+ # 从生产分支创建 hotfix
460
+ git checkout main
461
+ gw h
462
+ # hotfix/20260116-BUG-456-fix-crash
463
+
464
+ # 快速修复并测试
465
+ gw c
466
+
467
+ # 合并到 main 和 develop
468
+ git checkout main
469
+ git merge hotfix/20260116-BUG-456-fix-crash
470
+
471
+ git checkout develop
472
+ git merge hotfix/20260116-BUG-456-fix-crash
473
+
474
+ # 发布补丁版本
475
+ git checkout main
476
+ gw t
477
+ # 选择 patch
478
+ ```
479
+
480
+ ### 场景 3: 功能开关
481
+
482
+ 使用功能开关管理未完成的功能:
483
+
484
+ ```typescript
485
+ // feature-flags.ts
486
+ export const FEATURES = {
487
+ NEW_PAYMENT: process.env.ENABLE_NEW_PAYMENT === "true",
488
+ BETA_UI: process.env.ENABLE_BETA_UI === "true",
489
+ };
490
+
491
+ // 使用
492
+ if (FEATURES.NEW_PAYMENT) {
493
+ // 新功能代码
494
+ } else {
495
+ // 旧功能代码
496
+ }
497
+ ```
498
+
499
+ ## 监控和度量
500
+
501
+ ### 团队效率指标
502
+
503
+ 跟踪以下指标优化工作流:
504
+
505
+ - 📊 平均 PR 合并时间
506
+ - 📊 代码审查响应时间
507
+ - 📊 分支存活时间
508
+ - 📊 提交频率
509
+ - 📊 冲突解决时间
510
+
511
+ ### 使用 Git 统计
512
+
513
+ ```bash
514
+ # 查看提交统计
515
+ git log --oneline --since="1 month ago" | wc -l
516
+
517
+ # 查看贡献者统计
518
+ git shortlog -sn --since="1 month ago"
519
+
520
+ # 查看分支数量
521
+ git branch -a | wc -l
522
+ ```
523
+
524
+ ## 相关资源
525
+
526
+ - [开发指南](./development.md)
527
+ - [最佳实践](./best-practices.md)
528
+ - [分支管理](./branch-management.md)
529
+ - [版本管理](./tag-management.md)
530
+
531
+ ## 获取帮助
532
+
533
+ 如果团队在使用过程中遇到问题:
534
+
535
+ - 📖 查看文档
536
+ - 💬 提交 Issue
537
+ - 💡 参与 Discussions
538
+ - 📧 联系维护者