# prepare-commit-msg-hook ## Purpose 定义 prepare-commit-msg Git hook,在 `git commit` 编辑器打开时为开发者提供提交信息模板。 ## Requirements ### Requirement: prepare-commit-msg hook 提供提交信息模板 prepare-commit-msg hook SHALL 在 `git commit` 打开编辑器时,将规范格式的提交信息模板预填充到提交信息文件中,辅助开发者编写符合项目规范的多行提交信息。 #### Scenario: 模板预填充到提交信息文件 - **WHEN** `git commit` 被执行且编辑器打开提交信息文件 - **THEN** prepare-commit-msg hook SHALL 在提交信息文件中写入模板内容 - **THEN** 模板 SHALL 包含注释行(以 `#` 开头)引导开发者填写规范格式 #### Scenario: 模板包含格式引导 - **WHEN** 模板被写入提交信息文件 - **THEN** 模板 SHALL 包含首行格式提示:`# <类型>: <简短中文描述>` - **THEN** 模板 SHALL 包含空行占位符 - **THEN** 模板 SHALL 包含详细描述区:`# <详细说明>` - **THEN** 模板 SHALL 列出可用类型:`feat / fix / refactor / docs / style / test / chore` - **THEN** 模板 SHALL 包含示例:`feat: 添加供应商批量管理功能` #### Scenario: 注释行不被提交 - **WHEN** 用户在编辑器中基于模板填写提交信息并保存 - **THEN** 以 `#` 开头的模板注释行 SHALL 被 Git 作为注释过滤,不会成为提交信息的一部分 #### Scenario: 已有提交信息时跳过 - **WHEN** 提交信息文件已包含非注释内容(如 `-m` 参数指定、`git commit --amend`、merge commit、cherry-pick) - **THEN** prepare-commit-msg hook SHALL NOT 覆盖已有内容,直接退出 #### Scenario: Git 默认注释不阻止模板写入 - **WHEN** 提交信息文件只包含空行或 Git 默认生成的 `#` 注释行 - **THEN** prepare-commit-msg hook SHALL 将其视为没有已有提交信息 - **THEN** hook SHALL 在文件顶部写入模板,并保留 Git 原有注释内容 ### Requirement: 通过 hooks-install 安装 prepare-commit-msg hook SHALL 随 `make hooks-install` 一起安装到 `.git/hooks/`。 #### Scenario: 安装 prepare-commit-msg - **WHEN** 执行 `make hooks-install` - **THEN** `scripts/git-hooks/prepare-commit-msg` SHALL 被复制到 `.git/hooks/prepare-commit-msg` - **THEN** 该文件 SHALL 被设置为可执行(`chmod +x`) #### Scenario: hooks-check 验证安装状态 - **WHEN** 执行 `make hooks-check` - **THEN** 命令 SHALL 检查 `.git/hooks/prepare-commit-msg` 是否存在且可执行