如何在不进行任何新安装的情况下使用 git hooks 检查提交消息和分支名称
介绍
大家好!
我是一名技术主管,负责检查团队的拉取请求/合并请求,并为每个版本创建发布说明 (CHANGELOG.md)。
因此,我遇到的第一个问题是解决开发人员的提交问题,他们总是犯一些错误,或者提交信息有误(格式不正确),或者分支名称有误。
我搜索了一下,找到了不同的解决方案。很多解决方案需要使用外部软件,例如 Node(npm 库)或 PHP Composer 库等。而且这些项目采用不同的技术,例如 Android、PHP、.NET 等。
在检查了所有发现之后,我创建了一个可以在所有环境中运行且无需依赖外部资源的解决方案。
解决方法其实很简单。
只需遵循以下简单步骤
步骤:
- 在项目根目录中创建.git-hooks文件夹,与已有的 .git 文件夹处于同一级别
- 在此文件夹中创建两个文件:pre-commit和prepare-commit-msg(这两个文件没有扩展名)
- 将正确的代码放入每个文件中(我将在以下步骤下面添加它们)
- 在命令行中运行此命令,进入项目主文件夹(比 .git-hooks 上一级):git config core.hooksPath .git-hooks
- 准备好 !
代码
预提交文件代码:
#!/bin/bash
BRANCH=$(git rev-parse --abbrev-ref HEAD)
REGEX="^(dev|release)-([0-9]+)-q([0-9]+)\.([0-9]+)\.(.+)$"
if ! [[ $BRANCH =~ $REGEX ]]; then
echo "Your commit was rejected due to branching name"
echo "Please rename your branch with '(dev|release)-YYYY-qX.X.X' syntax"
exit 1
fi
prepare-commit-msg文件代码:
#!/bin/bash
MESSAGE=$(cat $1)
COMMITFORMAT="^(feat|fix|docs|style|refactor|test|chore|perf|other)(\((.*)\))?: #([0-9]+) (.*)$"
if ! [[ "$MESSAGE" =~ $COMMITFORMAT ]]; then
echo "Your commit was rejected due to the commit message. Skipping..."
echo ""
echo "Please use the following format:"
echo "feat: #1234 feature example comment"
echo "fix(ui): #4321 bugfix example comment"
echo ""
echo "More details on COMMITS.md"
exit 1
fi
您可以根据需要进行编辑。
解释
文件预提交:检查分支名称。
我这里只过滤了以下格式:
dev-YYYY-qX.XX
release-YYYY-qX.XX
其中 YYYY 代表年份,XXX 代表版本号,在本例中我们使用季度号。
你可以使用正则表达式修改,输入你想要的内容 ;)
文件prepare-commit-msg:检查提交信息。
本例中,我们使用以下格式:
https://www.conventionalcommits.org/en/v1.0.0/
http://karma-runner.github.io/1.0/dev/git-commit-msg.html
当然,您可以根据需要进行更改。
最后,命令git config core.hooksPath .git-hooks更改本地 git hooks 配置以使用新路径。
鏂囩珷鏉ユ簮锛�https://dev.to/anibalardid/how-to-check-commit-message-and-branch-name-with-git-hooks-without-any-new-installation-n34