1
0
Files
nex/openspec/specs/prepare-commit-msg-hook/spec.md
lanyuanxiaoyao c04a13bf8a refactor: 重写 Git hooks 体系,委托已有检查、新增模板与 LFS 校验
pre-commit 代码检查改为委托 _backend-lint / _versionctl-lint / _frontend-check,新增 LFS 指针校验;commit-msg 新增多行空行格式校验和模板注释忽略,移除 CJK/Python 字符集检测;新增 prepare-commit-msg 提交信息模板;hooks-install 增加 source 文件存在性校验;前端 check 补入 tsc -b 类型检查并修复暴露的类型错误
2026-05-06 13:44:28 +08:00

2.5 KiB
Raw Blame History

prepare-commit-msg-hook

Purpose

定义 prepare-commit-msg Git hookgit 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 是否存在且可执行