校验 commit message 的利器:husky-hook
2023-09-10 15:56:44
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,确保其符合团队的约定,从而提高代码的可读性和可维护性。