返回

校验 commit message 的利器:husky-hook

前端

husky-hook:实现 husky 与 .git/hooks 的无缝协作

前言

在软件开发过程中,提交规范化的 commit message 至关重要。它不仅有助于提高代码的可读性和可维护性,还方便团队成员快速了解提交内容和变更背后的原因。

husky 是一个流行的 npm 包,它允许我们在 git 提交钩子上运行脚本。通过 husky,我们可以轻松地对 commit message 进行校验,确保其符合团队的约定。

然而,husky 存在一个局限性,那就是它无法直接调用 .git/hooks 目录中的默认钩子。这在某些情况下会造成不便,例如当我们需要在 pre-commit 钩子中使用自定义脚本时。

husky-hook 的诞生

为了解决上述问题,我们开发了 husky-hook npm 包。husky-hook 直接安装后,使用一个命令即可生成校验 commit message 的脚本,该脚本可以与 husky/yorkie 无缝协作。

husky-hook 的使用

安装 husky-hook 非常简单,只需在终端中运行以下命令:

npm install -g husky-hook

安装完成后,在项目根目录下运行以下命令生成脚本:

husky-hook init

这将生成一个名为 husky-commit-msg 的脚本,该脚本位于 .husky/ 目录中。

默认情况下,husky-commit-msg 脚本包含以下内容:

#!/bin/sh

# 检查 commit message 是否符合规范
# 如果不符合,则退出并打印错误信息

# 您可以根据需要自定义此脚本
# 例如,使用正则表达式检查 commit message 格式

与 husky/yorkie 结合使用

要将 husky-hook 与 husky/yorkie 结合使用,只需在 .husky/pre-commit 文件中添加以下行:

npx husky-hook

现在,每次提交代码时,husky/yorkie 都会自动运行 husky-commit-msg 脚本。如果脚本检测到 commit message 不符合规范,则提交操作将被中止,并打印错误信息。

示例

假设我们希望确保 commit message 以动词开头,并且包含 Jira 问题 ID。我们可以将以下内容添加到 husky-commit-msg 脚本中:

# 检查 commit message 是否以动词开头
if ! [[ $1 =~ ^[a-zA-Z]+\b ]]; then
  echo "Error: Commit message must start with a verb."
  exit 1
fi

# 检查 commit message 是否包含 Jira 问题 ID
if ! [[ $1 =~ JIRA-[0-9]+ ]]; then
  echo "Error: Commit message must include a Jira issue ID."
  exit 1
fi

这样,只要 commit message 不符合上述规范,husky-hook 就会阻止提交。

总结

husky-hook 是一个强大的工具,它允许我们在 husky/yorkie 中轻松调用 .git/hooks 默认钩子。通过使用 husky-hook,我们可以轻松地校验 commit message,确保其符合团队的约定,从而提高代码的可读性和可维护性。