You need to sign in or sign up before continuing.
hookehuyr

chore(husky): 重组changelog脚本并完善文档

- 移动 update-changelog.sh 到 scripts/changelog/ 目录
- 新增 .husky/README.md Git hooks 完整文档
- 更新 scripts/changelog/README.md 添加自动更新说明
- 更新 .husky/post-commit 脚本路径引用
- 同步更新 docs/CHANGELOG.md 路径引用
1 +# Git Hooks 文档
2 +
3 +## 📋 概述
4 +
5 +本项目使用 [Husky](https://typicode.github.io/husky/) 管理 Git hooks,实现代码质量检查和自动化 CHANGELOG 更新。
6 +
7 +## 🔧 可用的 Hooks
8 +
9 +### 1. commit-msg - Commit Message 格式验证
10 +
11 +**文件**`.husky/commit-msg`
12 +
13 +**功能**:验证 commit message 是否符合 Conventional Commits 格式规范。
14 +
15 +**格式要求**
16 +```
17 +<type>(<scope>): <subject>
18 +```
19 +
20 +**允许的类型**
21 +- `feat` - 新功能
22 +- `fix` - Bug 修复
23 +- `docs` - 文档更新
24 +- `style` - 代码格式(不影响功能)
25 +- `refactor` - 重构(不是新功能也不是修复)
26 +- `perf` - 性能优化
27 +- `test` - 测试相关
28 +- `chore` - 构建/工具链相关
29 +- `revert` - 回滚提交
30 +
31 +**允许的范围**
32 +- `material` - 资料/文档模块
33 +- `product` - 产品模块
34 +- `plan` - 计划书模块
35 +- `user` - 用户模块
36 +- `auth` - 认证模块
37 +- `api` - API 接口
38 +- `ui` - UI 组件
39 +- `config` - 配置文件
40 +- `build` - 构建相关
41 +- `ci` - CI/CD 相关
42 +- `release` - 发布相关
43 +- `husky` - Git Hooks 相关
44 +- `chore` - 其他杂项
45 +- `to-parse` - 文档解析相关
46 +
47 +**主题要求**
48 +- 简短描述(不超过 50 字符)
49 +- 使用中文
50 +- 不以句号结尾
51 +- 使用祈使句(如 "添加" 而非 "添加了")
52 +
53 +**示例**
54 +```
55 +feat(material): 添加文档列表分类导航
56 +
57 +fix(auth): 修复登录状态判断问题
58 +
59 +docs(readme): 更新项目说明文档
60 +```
61 +
62 +---
63 +
64 +### 2. post-commit - 提交后自动化
65 +
66 +**文件**`.husky/post-commit`
67 +
68 +**功能**
69 +1. 显示提交成功信息和改动统计
70 +2. **自动更新 CHANGELOG.md**(通过 `scripts/changelog/update-changelog.sh`
71 +3. 创建补充提交(如果 CHANGELOG 有变更)
72 +
73 +**工作流程**
74 +```
75 +git commit
76 +
77 +[pre-commit hook] 代码质量检查
78 +
79 +[commit-msg hook] 验证 commit message 格式
80 +
81 +[post-commit hook] ✅ 执行
82 + ├─ 显示提交信息
83 + ├─ 自动更新 CHANGELOG
84 + └─ 如有变更,创建补充提交
85 +```
86 +
87 +**CHANGELOG 自动更新流程**
88 +1. 解析最新的 commit message
89 +2. 生成对应的 CHANGELOG 条目
90 +3. 插入到 `docs/CHANGELOG.md` 开头
91 +4. 如果 CHANGELOG 有变更:
92 + - 暂存 CHANGELOG 文件
93 + - 创建补充提交:`docs(changelog): 更新 CHANGELOG - <原始提交主题>`
94 + - 补充提交使用 `--no-verify` 跳过 hooks,避免循环
95 +
96 +**输出示例**
97 +```
98 +✅ 提交成功!
99 +
100 +📝 提交信息:
101 + Hash: a6618ea
102 + Author: huyirui
103 + Date: 2026-02-22 15:30:45
104 + Msg: fix(husky): 修复 CHANGELOG 自动更新功能
105 +
106 +📊 改动统计:
107 + 文件数: 3
108 + 新增行数: +45
109 + 删除行数: -12
110 +
111 +📝 更新 CHANGELOG.md...
112 + ✅ CHANGELOG.md 已自动更新
113 + 类型: 修复
114 + 范围: husky
115 + 描述: 修复 CHANGELOG 自动更新功能
116 +
117 + ✅ CHANGELOG 补充提交已创建
118 +```
119 +
120 +---
121 +
122 +## ⚙️ 配置说明
123 +
124 +### 安装
125 +
126 +```bash
127 +# Husky 已自动配置
128 +# Hooks 位于 .husky/ 目录
129 +
130 +# 确保 hooks 可执行
131 +chmod +x .husky/*
132 +```
133 +
134 +### 自定义
135 +
136 +如需修改 hook 行为,直接编辑 `.husky/` 目录下的脚本文件。
137 +
138 +---
139 +
140 +## 📝 Commit Message 最佳实践
141 +
142 +### ✅ 推荐格式
143 +
144 +```
145 +feat(module): 简短描述
146 +
147 +- 具体变更点 1
148 +- 具体变更点 2
149 +- 具体变更点 3
150 +
151 +Closes #123
152 +```
153 +
154 +### ❌ 避免格式
155 +
156 +```
157 +# ❌ 太长
158 +feat(module): 这是一个非常长的描述,超过五十个字符的限制,应该避免这种写法
159 +
160 +# ❌ 句号结尾
161 +feat(module): 添加新功能。
162 +
163 +# ❌ 非祈使句
164 +feat(module): 添加了新功能
165 +```
166 +
167 +---
168 +
169 +## 🔍 故障排查
170 +
171 +### 问题:提交被拒绝
172 +
173 +**原因**:commit message 格式不符合规范
174 +
175 +**解决**:按照 `<type>(<scope>): <subject>` 格式重新编写
176 +
177 +### 问题:CHANGELOG 未更新
178 +
179 +**可能原因**
180 +1. Commit message 格式不正确
181 +2. `scripts/changelog/update-changelog.sh` 脚本路径错误
182 +3. `docs/CHANGELOG.md` 文件不存在
183 +
184 +**解决**
185 +1. 检查 commit message 格式
186 +2. 运行 `pnpm changelog:check` 检查漏记
187 +3. 手动运行脚本调试
188 +
189 +---
190 +
191 +## 📚 相关文档
192 +
193 +- [CHANGELOG 工具文档](../scripts/changelog/README.md)
194 +- [项目 CHANGELOG](../../docs/CHANGELOG.md)
195 +- [Commit Message 规范](commit-msg)
...@@ -52,7 +52,7 @@ echo "" ...@@ -52,7 +52,7 @@ echo ""
52 # 自动更新 CHANGELOG.md 52 # 自动更新 CHANGELOG.md
53 # ============================================ 53 # ============================================
54 CHANGELOG_FILE="docs/CHANGELOG.md" 54 CHANGELOG_FILE="docs/CHANGELOG.md"
55 -SCRIPT_PATH="scripts/update-changelog.sh" 55 +SCRIPT_PATH="scripts/changelog/update-changelog.sh"
56 56
57 # 检查文件和脚本是否存在 57 # 检查文件和脚本是否存在
58 if [ ! -f "$CHANGELOG_FILE" ]; then 58 if [ ! -f "$CHANGELOG_FILE" ]; then
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
3 ## [2026-02-22] - CHANGELOG 自动更新功能 3 ## [2026-02-22] - CHANGELOG 自动更新功能
4 4
5 ### 配置 5 ### 配置
6 -- 新增 `scripts/update-changelog.sh` 自动更新脚本 6 +- 新增 `scripts/changelog/update-changelog.sh` 自动更新脚本
7 - 修改 `.husky/commit-msg` 调用自动更新脚本 7 - 修改 `.husky/commit-msg` 调用自动更新脚本
8 - 移除 `.husky/pre-commit` 中的手动 CHANGELOG 检查 8 - 移除 `.husky/pre-commit` 中的手动 CHANGELOG 检查
9 - 支持重复检测:同一天不同主题的提交会分别记录 9 - 支持重复检测:同一天不同主题的提交会分别记录
......
...@@ -6,11 +6,45 @@ ...@@ -6,11 +6,45 @@
6 6
7 | 文件 | 说明 | 使用频率 | 7 | 文件 | 说明 | 使用频率 |
8 |------|------|---------| 8 |------|------|---------|
9 +| `update-changelog.sh` | 自动更新 - 根据 commit message 自动更新 CHANGELOG.md | ⭐⭐⭐ 高频(自动) |
9 | `check-changelog.sh` | 漏记检查 - 扫描 git 提交,检查 CHANGELOG 漏记 | ⭐⭐⭐ 高频 | 10 | `check-changelog.sh` | 漏记检查 - 扫描 git 提交,检查 CHANGELOG 漏记 | ⭐⭐⭐ 高频 |
10 | `archive-changelog.sh` | 归档脚本 - 当记录超过 20 条时自动归档 | ⭐ 低频 | 11 | `archive-changelog.sh` | 归档脚本 - 当记录超过 20 条时自动归档 | ⭐ 低频 |
11 12
12 ## 🚀 使用方式 13 ## 🚀 使用方式
13 14
15 +### 自动更新 CHANGELOG(推荐)
16 +
17 +**说明**`update-changelog.sh` 是自动化脚本,通过 Git post-commit hook 自动调用。无需手动运行。
18 +
19 +**触发时机**:每次提交代码后自动执行
20 +
21 +**工作流程**
22 +1. 解析 commit message,提取 `type(scope): subject` 格式
23 +2. 根据 commit 类型映射到中文(feat→新增、fix→修复等)
24 +3. 生成 CHANGELOG 条目
25 +4. 自动插入到 `docs/CHANGELOG.md` 开头
26 +5. 如果 CHANGELOG 有变更,会自动创建补充提交
27 +
28 +**类型映射**
29 +- `feat``新增`
30 +- `fix``修复`
31 +- `docs``文档`
32 +- `style``样式`
33 +- `refactor``优化`
34 +- `perf``性能`
35 +- `test``测试`
36 +- `chore``配置`
37 +- `revert``回滚`
38 +
39 +**手动运行(仅调试用)**
40 +```bash
41 +./scripts/changelog/update-changelog.sh <commit-message-file>
42 +```
43 +
44 +**去重机制**:同一天相同主题的提交会分别记录,避免覆盖。
45 +
46 +---
47 +
14 ### 检查漏记 48 ### 检查漏记
15 49
16 ```bash 50 ```bash
......