仲灏小栈 仲灏小栈
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

仲灏

诚意, 正心, 格物, 致知
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Java

  • Docker

  • Jenkins

  • Nacos

  • SQL

  • Nginx

  • Windows

  • Linux

  • 虚拟机

  • Git

    • Git 实战使用
    • git flow 步骤解析
    • git 同步
    • git 提交信息规范
    • Git Hooks
      • 前言
      • 目的
      • 提交前出发检查
        • git hooks 的hooks
      • 检查提交描述是否符合规范要求
        • commitlint
        • 安装
        • 配置
        • husky (哈撒给)
        • 安装
        • 启用
        • 配置
        • 添加指令
        • 检验
    • gitignore
    • GitHub使用Action自动同步Gitee
  • 网络

  • 其他

  • 后端&运维
  • Git
仲灏
2022-02-24
目录

Git Hooks

# 前言

具备基本工程素养的同学都会注重编码规范,而代码风格检查(Code Linting,简称 Lint)是保障代码规范一致性的重要手段。

使用 Lint 会有什么好处呢?在我看来至少具有如下 3 点:

  • 更少的 Bug
  • 更高的开发效率,Lint 很容易发现低级的、显而易见的错误
  • 更高的可读性

很多时候我们lint的校验是放在持续集成阶段,大概流程如下:

代码提交 --> 跑 CI 发现问题(远程) --> 本地修复问题 --> 重新提交 --> 通过检查(远程)

但这样有一个问题,我们的 CI(持续集成) 往往不是仅仅只做 Lint工作,它还有会有很多其它的任务(如打包文件,静态资源上传 CDN 等),这样就导致特别的浪费时间,往往可能需要几分钟之后你才会发现问题,或者有的时候你根本就没有发现你的 CI 没有跑通过。

常见的流程:本地写好了代码,提交,开始跑 lint,发现不通过,本地修改代码,再提交,再等待 CI 的结果,若还有问题再重复之前的操作。

https://panjiachen.github.io/vue-element-admin-site/zh/guide/advanced/git-hook.html#husky

# 目的

当《提交描述信息》不符合 约定式提交规范 的时候,阻止当前的提交,并抛出对应的错误提示

# 提交前出发检查

# git hooks 的hooks

hooks 调用时机 作用 说明
pre-commit git dommit 执行前

它不接受任何参数,并且在获取提交日志消息并进行提交之前被调用。
脚本 git commit 以非零状态退出会导致命令在创建提交之前中止。
会在提交前被调用,并且可以按需指定是否要拒绝本次提交 可以用 git commit
--no-verify 绕过
commit-msg git commit 执行前<br /:
可用于将消息规范化为某种项目标准格式。 <br
还可用于在检查消息文件后拒绝提交。
可以用来规范化标准格式,并且可以按需指定是否要拒绝本次提交 可以用git commit
--no-verify 绕过

# 检查提交描述是否符合规范要求

需要使用到两个工具

  • commitlint: 检查提交信息。
  • husky:是git hook 工具

# commitlint

github https://github.com/conventional-changelog/commitlint

  • 检查您的提交消息是否符合传统的提交格式。
    • 提交格式: type(scope?): subject 在我的另一片文章git 提交规范中提到
    • 正确示例:fix(server): send cors headers

# 安装

npm install --save-dev @commitlint/config-conventional@16.2.1 @commitlint/cli@16.2.1
1

# 配置

  • 创建 commitlint.config.js,并键入以下内容:

  • module.exports = {
      extends: ['@commitlint/config-conventional'], // 集成规则
      // 定义规则 会覆盖集成规则
      roles: {
        // type 的类型定义:表示 git 提交的 type 必须在以下类型范围之内
        'type-enum': [
          //当前验证的错误级别
          2,
          //在什么情况下进行验证
          'always',
          // 泛型内容
          ['feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'chore', 'revert', 'WIP']
        ],
        // 大小写不做校验
        'subject-case': [0]
      }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    • 更多配置项查看官方文档 https://commitlint.js.org/#/reference-configuration

# husky (哈撒给)

# 安装

npm install husky@7.0.4 --save-dev
1

# 启用

npx husky install
1

# 配置

// package.json
{
  "scripts": {
    "prepare": "husky install"
  }
}
1
2
3
4
5
6

npm7+ 可以使用npm set-script prepare "husky install" 直接在package.json中生成脚本命令

# 添加指令

添加上面的commitlint指令在husky中

npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
1

.husky 的文件结构

image-20220225161525702

# 检验

git add .

git commit -m 'test hooks'

会得到提示

> git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file -
⧗   input: test git hooks
✖   subject may not be empty [subject-empty]
✖   type may not be empty [type-empty]

✖   found 2 problems, 0 warnings
ⓘ   Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint

husky - commit-msg hook exited with code 1 (error)
1
2
3
4
5
6
7
8
9
上次更新: 2022/06/05, 20:31:36
git 提交信息规范
gitignore

← git 提交信息规范 gitignore→

最近更新
01
vim日常使用记录
04-02
02
滑动窗口最大值
04-02
03
有效的字母异位词
04-02
更多文章>
Theme by Vdoing | Copyright © 2021-2025 izhaong | github | 蜀ICP备2021031194号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式