@zjex/git-workflow 0.2.24 → 0.3.0
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.
- package/.github/workflows/deploy-docs.yml +68 -0
- package/.github/workflows/test.yml +24 -4
- package/.husky/pre-commit +14 -0
- package/README.md +72 -1066
- package/dist/index.js +103 -13
- package/docs/.vitepress/cache/deps/_metadata.json +52 -0
- package/docs/.vitepress/cache/deps/chunk-2CLQ7TTZ.js +9719 -0
- package/docs/.vitepress/cache/deps/chunk-2CLQ7TTZ.js.map +7 -0
- package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js +12824 -0
- package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js.map +7 -0
- package/docs/.vitepress/cache/deps/package.json +3 -0
- package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +4505 -0
- package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +7 -0
- package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +583 -0
- package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +7 -0
- package/docs/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js +1352 -0
- package/docs/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js.map +7 -0
- package/docs/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js +1665 -0
- package/docs/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js.map +7 -0
- package/docs/.vitepress/cache/deps/vitepress___minisearch.js +1813 -0
- package/docs/.vitepress/cache/deps/vitepress___minisearch.js.map +7 -0
- package/docs/.vitepress/cache/deps/vue.js +347 -0
- package/docs/.vitepress/cache/deps/vue.js.map +7 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/chunk-2CLQ7TTZ.js +9719 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/chunk-2CLQ7TTZ.js.map +7 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/chunk-LE5NDSFD.js +12824 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/chunk-LE5NDSFD.js.map +7 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/package.json +3 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vue_devtools-api.js +4505 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vue_devtools-api.js.map +7 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vueuse_core.js +583 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vueuse_core.js.map +7 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vueuse_integrations_useFocusTrap.js +1352 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vueuse_integrations_useFocusTrap.js.map +7 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___mark__js_src_vanilla__js.js +1665 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___mark__js_src_vanilla__js.js.map +7 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___minisearch.js +1813 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___minisearch.js.map +7 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/vue.js +347 -0
- package/docs/.vitepress/cache/deps_temp_44e2fb0f/vue.js.map +7 -0
- package/docs/.vitepress/config.ts +167 -0
- package/docs/.vitepress/theme/custom.css +39 -0
- package/docs/.vitepress/theme/index.ts +4 -0
- package/docs/README.md +82 -0
- package/docs/commands/branch.md +468 -0
- package/docs/commands/commit.md +554 -0
- package/docs/commands/config.md +346 -0
- package/docs/commands/index.md +312 -0
- package/docs/commands/interactive.md +384 -0
- package/docs/commands/release.md +300 -0
- package/docs/commands/stash.md +309 -0
- package/docs/commands/tag.md +278 -0
- package/docs/commands/update.md +347 -0
- package/docs/config/ai-config.md +160 -0
- package/docs/config/branch-config.md +133 -0
- package/docs/config/commit-config.md +185 -0
- package/docs/config/config-file.md +776 -0
- package/docs/config/examples.md +279 -0
- package/docs/config/index.md +478 -0
- package/docs/guide/ai-commit.md +576 -0
- package/docs/guide/basic-usage.md +522 -0
- package/docs/guide/best-practices.md +426 -0
- package/docs/guide/branch-management.md +712 -0
- package/docs/guide/getting-started.md +294 -0
- package/docs/guide/index.md +168 -0
- package/docs/guide/installation.md +449 -0
- package/docs/guide/release-management.md +744 -0
- package/docs/guide/stash-management.md +608 -0
- package/docs/guide/tag-management.md +614 -0
- package/docs/index.md +205 -0
- package/docs/public/favicon.svg +21 -0
- package/docs/public/hero-logo.svg +43 -0
- package/docs/public/logo.svg +20 -0
- package/package.json +11 -2
- package/scripts/publish.js +55 -8
- package/scripts/publish.sh +20 -2
- package/scripts/release.sh +20 -2
- package/scripts/update-test-count.js +55 -0
- package/src/ai-service.ts +101 -15
- package/src/commands/init.ts +18 -0
- package/src/config.ts +1 -0
- package/tests/ai-service.test.ts +237 -2
- package/tests/help.test.ts +134 -0
- package/tests/init.test.ts +582 -0
- package/tests/release.test.ts +333 -0
- package/tests/setup.ts +21 -0
- package/tests/stash.test.ts +376 -0
- package/tests/update.test.ts +402 -0
- package/vitest.config.ts +3 -0
- package/zjex-logo.svg +22 -0
- package/zjex-optimized.svg +34 -0
- package/zjex.svg +1 -0
|
@@ -0,0 +1,614 @@
|
|
|
1
|
+
# Tag 管理
|
|
2
|
+
|
|
3
|
+
Tag 管理是版本控制的重要组成部分,Git Workflow 提供了智能的标签创建、管理和版本递增功能。
|
|
4
|
+
|
|
5
|
+
## 🏷️ Tag 管理理念
|
|
6
|
+
|
|
7
|
+
### 语义化版本控制
|
|
8
|
+
|
|
9
|
+
Git Workflow 遵循 [Semantic Versioning](https://semver.org/lang/zh-CN/) 规范:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
主版本号.次版本号.修订号[-预发布版本]
|
|
13
|
+
|
|
14
|
+
例如:1.2.3-beta.1
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**版本递增规则:**
|
|
18
|
+
- **主版本号(Major)** - 不兼容的 API 修改
|
|
19
|
+
- **次版本号(Minor)** - 向下兼容的功能性新增
|
|
20
|
+
- **修订号(Patch)** - 向下兼容的问题修正
|
|
21
|
+
- **预发布版本** - alpha, beta, rc
|
|
22
|
+
|
|
23
|
+
### 智能前缀检测
|
|
24
|
+
|
|
25
|
+
自动检测仓库中已有的 tag 前缀:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
gw t
|
|
29
|
+
检测到以下 tag 前缀:
|
|
30
|
+
? 选择 tag 前缀:
|
|
31
|
+
❯ v (最新: v1.2.0)
|
|
32
|
+
release- (最新: release-1.0.0)
|
|
33
|
+
@scope/pkg@ (最新: @scope/pkg@0.1.0)
|
|
34
|
+
+ 使用新前缀
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 🎯 创建 Tag
|
|
38
|
+
|
|
39
|
+
### 基本用法
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
gw t
|
|
43
|
+
# 或使用别名
|
|
44
|
+
gw tag
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 智能版本选择
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
gw t
|
|
51
|
+
? 选择 tag 前缀: v (最新: v1.2.0)
|
|
52
|
+
? 选择版本类型:
|
|
53
|
+
❯ patch → v1.2.1
|
|
54
|
+
minor → v1.3.0
|
|
55
|
+
major → v2.0.0
|
|
56
|
+
alpha → v1.2.1-alpha.1
|
|
57
|
+
beta → v1.2.1-beta.1
|
|
58
|
+
rc → v1.2.1-rc.1
|
|
59
|
+
custom → 自定义版本号
|
|
60
|
+
|
|
61
|
+
✔ Tag 创建成功: v1.2.1
|
|
62
|
+
✔ Tag 已推送: v1.2.1
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 版本类型详解
|
|
66
|
+
|
|
67
|
+
#### 正式版本
|
|
68
|
+
|
|
69
|
+
| 类型 | 说明 | 示例变化 | 使用场景 |
|
|
70
|
+
| ------- | ------------------------ | --------------- | ------------------------ |
|
|
71
|
+
| patch | 修复 Bug,向下兼容 | 1.2.0 → 1.2.1 | Bug 修复、安全补丁 |
|
|
72
|
+
| minor | 新功能,向下兼容 | 1.2.0 → 1.3.0 | 新功能、API 扩展 |
|
|
73
|
+
| major | 破坏性变更,不向下兼容 | 1.2.0 → 2.0.0 | 重大重构、API 变更 |
|
|
74
|
+
|
|
75
|
+
#### 预发布版本
|
|
76
|
+
|
|
77
|
+
| 类型 | 说明 | 示例 | 使用场景 |
|
|
78
|
+
| ----- | ------------ | ------------------- | ------------------------ |
|
|
79
|
+
| alpha | 内测版本 | 1.2.1-alpha.1 | 早期开发、内部测试 |
|
|
80
|
+
| beta | 公测版本 | 1.2.1-beta.1 | 功能完整、公开测试 |
|
|
81
|
+
| rc | 候选发布版本 | 1.2.1-rc.1 | 发布前最终测试 |
|
|
82
|
+
|
|
83
|
+
### 预发布版本管理
|
|
84
|
+
|
|
85
|
+
#### 从正式版本创建预发布版本
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# 当前版本: v1.2.0
|
|
89
|
+
gw t
|
|
90
|
+
? 选择版本类型:
|
|
91
|
+
❯ alpha → v1.2.1-alpha.1
|
|
92
|
+
beta → v1.2.1-beta.1
|
|
93
|
+
rc → v1.2.1-rc.1
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
#### 预发布版本递增
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# 当前版本: v1.2.1-beta.1
|
|
100
|
+
gw t
|
|
101
|
+
? 选择版本类型:
|
|
102
|
+
❯ pre → v1.2.1-beta.2 # 预发布版本递增
|
|
103
|
+
release → v1.2.1 # 转为正式版本
|
|
104
|
+
patch → v1.2.2 # 跳过当前预发布,创建新的 patch
|
|
105
|
+
minor → v1.3.0 # 跳过当前预发布,创建新的 minor
|
|
106
|
+
major → v2.0.0 # 跳过当前预发布,创建新的 major
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### 预发布版本转正
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# 当前版本: v1.2.1-rc.2
|
|
113
|
+
gw t
|
|
114
|
+
? 选择版本类型:
|
|
115
|
+
❯ release → v1.2.1 # 转为正式版本
|
|
116
|
+
|
|
117
|
+
✔ Tag 创建成功: v1.2.1
|
|
118
|
+
✔ 预发布版本已转为正式版本
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### 自定义版本号
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
gw t
|
|
125
|
+
? 选择版本类型:
|
|
126
|
+
patch → v1.2.1
|
|
127
|
+
minor → v1.3.0
|
|
128
|
+
major → v2.0.0
|
|
129
|
+
❯ custom → 自定义版本号
|
|
130
|
+
|
|
131
|
+
? 输入自定义版本号: 2.0.0-beta.1
|
|
132
|
+
✔ Tag 创建成功: v2.0.0-beta.1
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### 指定前缀创建
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# 直接指定前缀
|
|
139
|
+
gw t v
|
|
140
|
+
gw t release-
|
|
141
|
+
gw t @scope/pkg@
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## 📋 列出 Tags
|
|
145
|
+
|
|
146
|
+
### 基本用法
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
gw ts
|
|
150
|
+
# 或使用别名
|
|
151
|
+
gw tags
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 按前缀过滤
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# 列出所有 v 开头的标签
|
|
158
|
+
gw ts v
|
|
159
|
+
|
|
160
|
+
# 列出所有 release- 开头的标签
|
|
161
|
+
gw ts release-
|
|
162
|
+
|
|
163
|
+
# 列出所有标签
|
|
164
|
+
gw ts
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 标签列表显示
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
gw ts v
|
|
171
|
+
📋 标签列表 (前缀: v)
|
|
172
|
+
|
|
173
|
+
v2.1.0 (2 days ago) Latest release with new features
|
|
174
|
+
v2.0.1 (1 week ago) Hotfix for critical bug
|
|
175
|
+
v2.0.0 (2 weeks ago) Major release with breaking changes
|
|
176
|
+
v1.3.2 (3 weeks ago) Bug fixes and improvements
|
|
177
|
+
v1.3.1 (1 month ago) Security patch
|
|
178
|
+
v1.3.0 (1 month ago) New features and enhancements
|
|
179
|
+
|
|
180
|
+
共 6 个标签
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**显示信息:**
|
|
184
|
+
- **标签名** - 完整的标签名称
|
|
185
|
+
- **时间** - 创建时间(相对时间)
|
|
186
|
+
- **消息** - 标签附带的消息(如果有)
|
|
187
|
+
|
|
188
|
+
## 🗑️ 删除 Tags
|
|
189
|
+
|
|
190
|
+
### 基本用法
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
gw td
|
|
194
|
+
# 或使用别名
|
|
195
|
+
gw tag:delete
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### 交互式删除
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
gw td
|
|
202
|
+
? 选择要删除的 tag:
|
|
203
|
+
❯ v1.2.0 Release v1.2.0 (2 days ago)
|
|
204
|
+
v1.1.0 Release v1.1.0 (1 week ago)
|
|
205
|
+
v1.0.0 Initial release (2 weeks ago)
|
|
206
|
+
取消
|
|
207
|
+
|
|
208
|
+
分支信息:
|
|
209
|
+
名称: v1.2.0
|
|
210
|
+
创建时间: 2 days ago
|
|
211
|
+
提交: a1b2c3d
|
|
212
|
+
消息: Release v1.2.0
|
|
213
|
+
────────────────────────────────────────
|
|
214
|
+
? 确认删除 tag v1.2.0?
|
|
215
|
+
❯ 是,删除本地和远程
|
|
216
|
+
仅删除本地
|
|
217
|
+
取消
|
|
218
|
+
|
|
219
|
+
✔ 本地 tag 已删除: v1.2.0
|
|
220
|
+
✔ 远程 tag 已删除: origin/v1.2.0
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### 批量删除策略
|
|
224
|
+
|
|
225
|
+
#### 删除预发布版本
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# 删除所有 alpha 版本
|
|
229
|
+
git tag -l "*alpha*" | xargs git tag -d
|
|
230
|
+
git tag -l "*alpha*" | xargs -I {} git push origin :refs/tags/{}
|
|
231
|
+
|
|
232
|
+
# 删除所有 beta 版本
|
|
233
|
+
git tag -l "*beta*" | xargs git tag -d
|
|
234
|
+
git tag -l "*beta*" | xargs -I {} git push origin :refs/tags/{}
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
#### 删除过期版本
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
# 删除 6 个月前的标签
|
|
241
|
+
git for-each-ref --format='%(refname:short) %(creatordate:unix)' refs/tags | \
|
|
242
|
+
awk '$2 < '$(date -d '6 months ago' +%s)' {print $1}' | \
|
|
243
|
+
xargs git tag -d
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## ✏️ 修改 Tags
|
|
247
|
+
|
|
248
|
+
### 基本用法
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
gw tu
|
|
252
|
+
# 或使用别名
|
|
253
|
+
gw tag:update
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### 修改标签消息
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
gw tu
|
|
260
|
+
? 选择要修改的 tag:
|
|
261
|
+
❯ v1.2.0 Release v1.2.0 (2 days ago)
|
|
262
|
+
v1.1.0 Release v1.1.0 (1 week ago)
|
|
263
|
+
|
|
264
|
+
当前消息: Release v1.2.0
|
|
265
|
+
? 输入新的 tag 消息: Release v1.2.0 - Bug fixes and performance improvements
|
|
266
|
+
|
|
267
|
+
✔ Tag 消息已更新: v1.2.0
|
|
268
|
+
✔ 已推送到远程
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### 修改标签指向
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
# 手动修改标签指向的提交
|
|
275
|
+
git tag -f v1.2.0 abc1234
|
|
276
|
+
git push origin v1.2.0 --force
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## 🎯 Tag 使用场景
|
|
280
|
+
|
|
281
|
+
### 场景一:版本发布流程
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
# 1. 开发完成,准备发布
|
|
285
|
+
gw c # 最后的提交
|
|
286
|
+
|
|
287
|
+
# 2. 创建预发布版本进行测试
|
|
288
|
+
gw t
|
|
289
|
+
# 选择: beta → v1.3.0-beta.1
|
|
290
|
+
|
|
291
|
+
# 3. 测试发现问题,修复后递增预发布版本
|
|
292
|
+
gw c # 修复提交
|
|
293
|
+
gw t
|
|
294
|
+
# 选择: pre → v1.3.0-beta.2
|
|
295
|
+
|
|
296
|
+
# 4. 测试通过,创建候选版本
|
|
297
|
+
gw t
|
|
298
|
+
# 选择: rc → v1.3.0-rc.1
|
|
299
|
+
|
|
300
|
+
# 5. 最终测试通过,发布正式版本
|
|
301
|
+
gw t
|
|
302
|
+
# 选择: release → v1.3.0
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### 场景二:紧急修复发布
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
# 1. 发现生产环境 Bug
|
|
309
|
+
gw h --base main
|
|
310
|
+
# BUG-456, fix-critical-security-issue
|
|
311
|
+
|
|
312
|
+
# 2. 修复问题
|
|
313
|
+
gw c
|
|
314
|
+
# 🐛 fix(security): 修复 SQL 注入漏洞
|
|
315
|
+
|
|
316
|
+
# 3. 立即发布补丁版本
|
|
317
|
+
gw t
|
|
318
|
+
# 选择: patch → v1.2.1
|
|
319
|
+
|
|
320
|
+
# 4. 部署到生产环境
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### 场景三:功能预览版本
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
# 1. 新功能开发完成
|
|
327
|
+
gw f
|
|
328
|
+
# PROJ-123, add-new-dashboard
|
|
329
|
+
|
|
330
|
+
gw c
|
|
331
|
+
# ✨ feat(dashboard): 添加新的仪表板功能
|
|
332
|
+
|
|
333
|
+
# 2. 创建 alpha 版本供内部测试
|
|
334
|
+
gw t
|
|
335
|
+
# 选择: alpha → v1.3.0-alpha.1
|
|
336
|
+
|
|
337
|
+
# 3. 收集反馈,改进功能
|
|
338
|
+
gw c
|
|
339
|
+
# 💄 style(dashboard): 优化界面布局
|
|
340
|
+
|
|
341
|
+
gw t
|
|
342
|
+
# 选择: pre → v1.3.0-alpha.2
|
|
343
|
+
|
|
344
|
+
# 4. 功能稳定后创建 beta 版本
|
|
345
|
+
gw t
|
|
346
|
+
# 选择: beta → v1.3.0-beta.1
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### 场景四:多版本维护
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
# 维护多个版本分支
|
|
353
|
+
# v1.x 分支
|
|
354
|
+
git checkout release/1.x
|
|
355
|
+
gw t
|
|
356
|
+
# 选择: patch → v1.2.3
|
|
357
|
+
|
|
358
|
+
# v2.x 分支
|
|
359
|
+
git checkout release/2.x
|
|
360
|
+
gw t
|
|
361
|
+
# 选择: patch → v2.1.1
|
|
362
|
+
|
|
363
|
+
# 主开发分支
|
|
364
|
+
git checkout main
|
|
365
|
+
gw t
|
|
366
|
+
# 选择: minor → v2.2.0
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## 🔧 高级 Tag 技巧
|
|
370
|
+
|
|
371
|
+
### 技巧一:带签名的标签
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
# 创建 GPG 签名标签
|
|
375
|
+
git tag -s v1.2.0 -m "Release v1.2.0"
|
|
376
|
+
|
|
377
|
+
# 验证签名
|
|
378
|
+
git tag -v v1.2.0
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### 技巧二:标签与分支关联
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
# 查看标签对应的分支
|
|
385
|
+
git branch --contains v1.2.0
|
|
386
|
+
|
|
387
|
+
# 查看标签之间的差异
|
|
388
|
+
git diff v1.1.0..v1.2.0
|
|
389
|
+
|
|
390
|
+
# 基于标签创建分支
|
|
391
|
+
git checkout -b hotfix/v1.2.1 v1.2.0
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### 技巧三:标签搜索和过滤
|
|
395
|
+
|
|
396
|
+
```bash
|
|
397
|
+
# 搜索包含特定模式的标签
|
|
398
|
+
git tag -l "v1.2.*"
|
|
399
|
+
git tag -l "*beta*"
|
|
400
|
+
git tag -l "*rc*"
|
|
401
|
+
|
|
402
|
+
# 按时间排序标签
|
|
403
|
+
git tag --sort=-creatordate
|
|
404
|
+
git tag --sort=version:refname
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### 技巧四:标签与 CI/CD 集成
|
|
408
|
+
|
|
409
|
+
```bash
|
|
410
|
+
# GitHub Actions 示例
|
|
411
|
+
name: Release
|
|
412
|
+
on:
|
|
413
|
+
push:
|
|
414
|
+
tags:
|
|
415
|
+
- 'v*'
|
|
416
|
+
|
|
417
|
+
jobs:
|
|
418
|
+
release:
|
|
419
|
+
runs-on: ubuntu-latest
|
|
420
|
+
steps:
|
|
421
|
+
- name: Create Release
|
|
422
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
423
|
+
run: |
|
|
424
|
+
echo "Creating release for ${GITHUB_REF#refs/tags/}"
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
## ⚙️ Tag 配置管理
|
|
428
|
+
|
|
429
|
+
### 默认前缀配置
|
|
430
|
+
|
|
431
|
+
```json
|
|
432
|
+
{
|
|
433
|
+
"defaultTagPrefix": "v"
|
|
434
|
+
}
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
设置后,创建标签时会跳过前缀选择步骤。
|
|
438
|
+
|
|
439
|
+
### 版本格式配置
|
|
440
|
+
|
|
441
|
+
```json
|
|
442
|
+
{
|
|
443
|
+
"tagFormat": {
|
|
444
|
+
"prefix": "v",
|
|
445
|
+
"separator": ".",
|
|
446
|
+
"prerelease": {
|
|
447
|
+
"alpha": "alpha",
|
|
448
|
+
"beta": "beta",
|
|
449
|
+
"rc": "rc"
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### 自动推送配置
|
|
456
|
+
|
|
457
|
+
```json
|
|
458
|
+
{
|
|
459
|
+
"tagAutoPush": true
|
|
460
|
+
}
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
创建标签后自动推送到远程仓库。
|
|
464
|
+
|
|
465
|
+
## 📊 Tag 管理度量
|
|
466
|
+
|
|
467
|
+
### 版本发布频率
|
|
468
|
+
|
|
469
|
+
```bash
|
|
470
|
+
#!/bin/bash
|
|
471
|
+
# tag-metrics.sh
|
|
472
|
+
|
|
473
|
+
echo "=== Tag 管理度量报告 ==="
|
|
474
|
+
echo "时间: $(date)"
|
|
475
|
+
echo
|
|
476
|
+
|
|
477
|
+
# 版本发布统计
|
|
478
|
+
echo "📊 版本发布统计:"
|
|
479
|
+
git tag --sort=-creatordate | head -10 | while read tag; do
|
|
480
|
+
date=$(git log -1 --format=%ai $tag)
|
|
481
|
+
echo "$tag - $date"
|
|
482
|
+
done
|
|
483
|
+
echo
|
|
484
|
+
|
|
485
|
+
# 版本类型分布
|
|
486
|
+
echo "📊 版本类型分布:"
|
|
487
|
+
echo "正式版本: $(git tag -l | grep -v -E '(alpha|beta|rc)' | wc -l)"
|
|
488
|
+
echo "Alpha 版本: $(git tag -l | grep alpha | wc -l)"
|
|
489
|
+
echo "Beta 版本: $(git tag -l | grep beta | wc -l)"
|
|
490
|
+
echo "RC 版本: $(git tag -l | grep rc | wc -l)"
|
|
491
|
+
echo
|
|
492
|
+
|
|
493
|
+
# 发布间隔分析
|
|
494
|
+
echo "📊 发布间隔分析:"
|
|
495
|
+
git tag --sort=-creatordate | head -5 | while read tag; do
|
|
496
|
+
commits=$(git rev-list --count ${tag}..HEAD 2>/dev/null || echo "0")
|
|
497
|
+
echo "$tag: $commits commits behind HEAD"
|
|
498
|
+
done
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### 版本质量度量
|
|
502
|
+
|
|
503
|
+
```bash
|
|
504
|
+
# 统计每个版本的提交数量
|
|
505
|
+
git tag --sort=-creatordate | head -10 | while read current; do
|
|
506
|
+
previous=$(git tag --sort=-creatordate | grep -A1 "^$current$" | tail -1)
|
|
507
|
+
if [ "$previous" != "$current" ] && [ -n "$previous" ]; then
|
|
508
|
+
commits=$(git rev-list --count $previous..$current)
|
|
509
|
+
echo "$current: $commits commits"
|
|
510
|
+
fi
|
|
511
|
+
done
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
## 🚨 常见问题解决
|
|
515
|
+
|
|
516
|
+
### 问题一:标签已存在
|
|
517
|
+
|
|
518
|
+
```bash
|
|
519
|
+
❌ 标签 'v1.2.0' 已存在
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
**解决方案:**
|
|
523
|
+
```bash
|
|
524
|
+
# 删除现有标签
|
|
525
|
+
git tag -d v1.2.0
|
|
526
|
+
git push origin :refs/tags/v1.2.0
|
|
527
|
+
|
|
528
|
+
# 重新创建
|
|
529
|
+
gw t
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
### 问题二:无法推送标签
|
|
533
|
+
|
|
534
|
+
```bash
|
|
535
|
+
❌ 标签推送失败: 权限不足
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
**解决方案:**
|
|
539
|
+
1. 检查推送权限
|
|
540
|
+
2. 手动推送:`git push origin v1.2.0`
|
|
541
|
+
3. 联系仓库管理员
|
|
542
|
+
|
|
543
|
+
### 问题三:版本号格式错误
|
|
544
|
+
|
|
545
|
+
```bash
|
|
546
|
+
❌ 版本号格式不正确: 1.2.3.4
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
**解决方案:**
|
|
550
|
+
- 遵循 semver 格式:`major.minor.patch[-prerelease]`
|
|
551
|
+
- 使用工具提供的版本选择而不是自定义
|
|
552
|
+
|
|
553
|
+
### 问题四:标签与提交不匹配
|
|
554
|
+
|
|
555
|
+
```bash
|
|
556
|
+
❌ 标签指向的提交不存在
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
**解决方案:**
|
|
560
|
+
```bash
|
|
561
|
+
# 检查提交是否存在
|
|
562
|
+
git log --oneline -n 10
|
|
563
|
+
|
|
564
|
+
# 重新创建标签
|
|
565
|
+
git tag v1.2.0 <correct-commit-hash>
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
## 🔗 与其他功能集成
|
|
569
|
+
|
|
570
|
+
### 与分支管理集成
|
|
571
|
+
|
|
572
|
+
```bash
|
|
573
|
+
# 功能开发完成后创建标签
|
|
574
|
+
gw f # 创建功能分支
|
|
575
|
+
gw c # 提交代码
|
|
576
|
+
gw t # 创建版本标签
|
|
577
|
+
gw d # 删除功能分支
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
### 与版本发布集成
|
|
581
|
+
|
|
582
|
+
```bash
|
|
583
|
+
# 更新 package.json 版本
|
|
584
|
+
gw r # 选择版本类型
|
|
585
|
+
|
|
586
|
+
# 创建对应的 git 标签
|
|
587
|
+
gw t # 创建相同版本的标签
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
### 与 CI/CD 集成
|
|
591
|
+
|
|
592
|
+
```yaml
|
|
593
|
+
# .github/workflows/release.yml
|
|
594
|
+
name: Release
|
|
595
|
+
on:
|
|
596
|
+
push:
|
|
597
|
+
tags:
|
|
598
|
+
- 'v*'
|
|
599
|
+
|
|
600
|
+
jobs:
|
|
601
|
+
release:
|
|
602
|
+
runs-on: ubuntu-latest
|
|
603
|
+
steps:
|
|
604
|
+
- uses: actions/checkout@v3
|
|
605
|
+
- name: Get tag version
|
|
606
|
+
run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
|
|
607
|
+
- name: Create Release
|
|
608
|
+
run: |
|
|
609
|
+
echo "Creating release for $VERSION"
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
---
|
|
613
|
+
|
|
614
|
+
通过系统化的 Tag 管理,你可以建立清晰的版本发布流程。Git Workflow 的智能版本递增和前缀检测功能,让版本管理变得简单而规范。
|