【git】husky 攻略

相关文章

husky 攻略


一、什么是husky

Husky 是一个 Git 钩子工具,它允许您在 Git 提交或推送等操作前或后执行自定义脚本。这些脚本可以用于自动化任务,例如代码格式化、代码质量检查、单元测试等。Husky 是在 Node.js 环境中运行的,并且可以与 npm 或 yarn 配合使用。

二、husky的主要特点和用法

  • 易于使用:Husky 的配置简单直观,通过简单的配置即可为 Git 钩子添加自定义脚本。

  • 灵活性:Husky 可以在 Git 钩子的多个生命周期执行脚本,包括 commit、pre-commit、pre-push 等。

  • 集成性:Husky 可以与其他工具集成,例如 ESLint、Prettier 等,可以在提交代码前自动进行代码检查和格式化。

  • 跨平台:Husky 可以在 Windows、MacOS 和 Linux 等操作系统上运行,并且与常见的 Node.js 项目框架兼容。

三、husky的钩子

本地钩子

  • prepare-commit-msg:在用户编辑提交消息前触发,用于在提交消息编辑器启动前自动化生成一些内容。

  • commit-msg:在用户编辑提交消息后准备提交时触发,用于检查提交消息是否符合特定的格式或规范。

  • pre-commit:在执行提交前触发,用于在代码提交前执行一些检查或操作,例如代码格式化、代码静态分析、单元测试等。

  • post-commit:在提交完成后触发,用于在提交操作完成后执行一些操作,例如更新文档、发送通知等。

远程钩子

  • pre-receive:在远程仓库接收到推送前触发,用于在接收推送前执行一些检查或操作,例如阻止某些提交或检查提交内容。

  • update:在远程仓库更新引用(例如分支)时触发,用于在更新引用前执行一些检查或操作,例如阻止某些提交或检查提交内容。

  • post-receive:在远程仓库接收到推送后触发,用于在接收推送后执行一些操作,例如触发部署脚本、发送通知等。

四、使用husky

安装 Husky

首先,在项目的根目录下运行以下命令来安装 Husky

1
npm install husky --save-dev

初始化 Husky

在项目根目录中执行以下命令来初始化 Husky

1
npx husky install

将在项目根目录下生成一个 .husky 目录,里面预设了许多钩子文件

配置 Husky 钩子

示例

commit-msg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh

commit_msg=$(cat .git/COMMIT_EDITMSG) # 从文件中读取提交消息

# 打印提交消息
echo "提交的消息为:$commit_msg"

# 检查提交消息是否符合 Conventional Commits 规范
if ! echo "$commit_msg" | grep -qE "^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\([^\(\)]+\))?: .{1,}$"; then
echo "Error: 提交消息不符合 Git 约定式提交规范,请按照规范格式提交消息。"
echo "示例: feat(component): 添加新功能"
exit 1
fi

# 如果代码检查和格式化都通过,则允许提交
exit 0

pre-commit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/sh

# 在提交前运行 ESLint 进行代码检查
eslint .

# 如果代码检查失败,则中止提交
if [ $? -ne 0 ]; then
echo "代码检查失败,请解决以上错误后再次提交。"
exit 1
fi

# 在提交前运行 Prettier 进行代码格式化
# 请根据实际情况调整 Prettier 的命令和配置
prettier --write .

# 如果代码格式化失败,则中止提交
if [ $? -ne 0 ]; then
echo "代码格式化失败,请解决以上错误后再次提交。"
exit 1
fi

# 如果代码检查和格式化都通过,则允许提交
exit 0

验证

执行commit消息,或者push代码即可验证


喜欢这篇文章?打赏一下支持一下作者吧!
【git】husky 攻略
https://www.cccccl.com/20230401/git/husky 攻略/
作者
Jeffrey
发布于
2023年4月1日
许可协议