当前位置: 首页 > news >正文

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 的管理。它允许你

  1. 将 Hooks 保存在项目中,随代码提交
  2. 使用 npm scripts 管理 Hooks
  3. 支持跨平台(Windows、macOS、Linux)
  4. 生态集成:无缝对接 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 生命周期脚本 自动管理钩子。官方认为:

  1. 手动初始化容易遗漏(尤其在新成员加入项目时)
  2. 自动初始化更符合现代 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。

相关文章:

  • mysql的乐观锁与悲观锁
  • VUE3 中的 ResizeObserver 警告彻底解决方案
  • Mysql 中的日期时间函数汇总
  • 喷涂喷漆机器人详解
  • Translational Psychiatry | 注意缺陷多动障碍儿童延迟厌恶的行为与神经功能特征茗创科技茗创科技
  • 互联网大厂面试实录:从内容社区到AIGC的Java全栈技术场景问答
  • 【华为OD-B卷-打印文件 100分(python、java、c++、js、c)】
  • 码钉枪行业2025数据分析报告
  • C++修炼:map和set的使用
  • 频分复用信号在信道中的状态
  • 粤港澳编程题
  • Wan2.1 图生视频 支持批量生成
  • 渐开线少齿差传动学习笔记
  • 【Linux】第二十二章 访问网络附加内存
  • 十大排序算法--快速排序
  • CBCharacteristic:是「特征」还是「数据通道」?
  • 独热编码笔记
  • idea本地debug断点小技巧
  • PCB设计教程【入门篇】——电路分析基础-基本元件(二极管三极管场效应管)
  • OpenCV图像边缘检测
  • 韩国总统选举白热化进行中,中韩青年民间交流促两国友好往来
  • 新造古镇丨江浙沪重点打造的“水乡客厅”,古镇也能串着玩?
  • 特朗普与普京开始进行电话会谈,稍后还将致电泽连斯基
  • 巴基斯坦外长访华是否与印巴局势有关?外交部:此访体现巴方高度重视中巴关系
  • 既是工具又是食物,可食用机器人开启舌尖上的新科技
  • 专家:家长要以身作则,孩子是模仿者学习者有时也是评判者