Git Hooks 和 自动生成 Commit Message
前言:
企业编程必须始终依赖流程,而不是个人。个人能力很重要,应该鼓励,但不能指望它,否则软件质量将不一致,没有可持续性。一旦顶级程序员跳槽,公司就会陷入困境。企业应该努力改进工作流程,而不是努力改进人员,始终坚持流程优先于人员。
文章目录
- Git hooks
- 常见的 Hook 类型
- Husky
- Husky 初始化
- 添加新的 hook
- Lint-staged
- 自动生成 Commit Message
- commitlint
Git hooks
在团队协作开发中,代码规范的一致性和提交质量至关重要。Git Hook 是 Git 版本控制系统提供的强大机制,它允许开发者在特定 Git 事件(如提交代码、推送变更等)发生时触发自定义脚本。这些钩子脚本就像代码世界的自动哨兵,能在关键时刻执行预设的质量检查。
常见的 Hook 类型
钩子类型 | 触发时机 | 典型应用场景 |
---|---|---|
pre-commit | 提交消息输入前 | 代码风格检查,单元测试 |
commit-msg | 提交消息保存时 | 校验提交信息格式 |
pre-push | 推送到远程仓库前 | 集成测试,构建验证 |
post-merge | 合并操作完成后 | 依赖安装,环境配置 |
Git Hook 默认存储在 .git/hooks 目录中,
Husky
Git Hook 都是使用 shell 脚本实现的,对不不熟悉 shell 脚本的人来说不太容易,所以有了 Husky, 它是一个流行的 npm 包,用于简化 Git Hook 的管理。它允许你
- 将 Hooks 保存在项目中,随代码提交
- 使用 npm scripts 管理 Hooks
- 支持跨平台(Windows、macOS、Linux)
- 生态集成:无缝对接 ESLint、Prettier 等工具链
Husky 初始化
# 安装 Husky
npm install husky --save-dev# 初始化Husky 同时会自动插入 "prepare": "husky", 到package.json
npx husky init
v8.0 之前的 Husky 使用
npx husky install
来初始化Husky,V8版本弃用。npx husky init 初始化 husky.
所以当使用 npx husky install 命令的时候会报错husky - install command is DEPRECATED
为什么 husky install 被弃用?
在 Husky 8.x+ 版本中,开发者移除了手动初始化命令,转而通过 npm 生命周期脚本 自动管理钩子。官方认为:
- 手动初始化容易遗漏(尤其在新成员加入项目时)
- 自动初始化更符合现代 Node.js 项目规范
添加新的 hook
执行 echo "npm lint" > .husky/pre-commit
命令,将npm lint
命令添加到 pre-commit
,每次 commit
之前就会执行 npm lint
只要 npm lint
返回非 0,就会阻断提交。
// package.json
{"scripts": {"lint": "eslint . --fix",}
}
Lint-staged
每次提交前会执行代码检查,如果项目文件特别多,每次提交时都会花费相当多的时间,所以就有了 lint-stage
.它会根据配置使用对应的代码检查工具校验 stage
的文件,而不是所有的文件。也就是只检查变化了的文件。
安装 lint-staged
npm install --save-dev lint-staged # requires further setup
配置 lint-staged
{
...."lint-staged": {"*.{js,jsx,ts,tsx}": ["eslint --fix"],"*.{json,md,yaml,yml}": ["prettier --write"]....}
自动生成 Commit Message
每次提交都要填写 Commit Message 以方便其它人了解其中的改动,改动较多或者复杂的时候,写起来比较麻烦。最新版的 VS Code
已经支持通过 Copilot
来辅助生成 Commit Message
,安装 Github Copilot
插件并登录之后,点击 源码管理
面板的 Commit Message
输入框后方的Copilot
图标即可自动生成 Commit Message
。
Copilot
默认生成的 Commit Message
只有一段描述,有时候中英文还不一定。为了生成一份标准格式的 Commit Message
我们可以通过配置文件,告诉 Copilot
应该生成一份什么样的 Commit Message
。在 VS Code
的配置文件中添加如下配置:
{..."github.copilot.chat.commitMessageGeneration.instructions": [{"file": ".vscode/.copilot-commit-message-instructions.md"}]...}
然后再根据 file
指定的位置添加对应的 md
文件。 文件内容就是对要生成的 Commit Message
的要求,可以让 Copilot
或者 DeepSeek
辅助生成一份
然后再点击生成按钮,就可以生成符合标准的 Commit Message
了。
commitlint
commitlint
是用来校验 Commit Message
是否符合标准的,就不讲了,Copilot
生成的一般都是符合标准的 LOL。