如何通过GitHub pre-commit强制提交信息包含AB#格式的Azure工单编号
配置方案
单仓库配置(轻量无额外依赖方案)
- 第一步:安装pre-commit
执行命令pip install pre-commit完成安装。 - 第二步:添加pre-commit配置
在仓库根目录新建.pre-commit-config.yaml文件,写入以下内容:repos: - repo: local hooks: - id: check-azure-workitem name: 校验Azure Boards工单号 stages: [commit-msg, pre-push] language: system entry: .git/hooks/check_azure_workitem.sh args: [$COMMIT_MSG_FILE] - 第三步:编写校验脚本
在仓库.git/hooks目录下新建check_azure_workitem.sh脚本,写入以下内容:#!/bin/bash # pre-push阶段校验时遍历所有待推送的提交 if [ "$PRE_COMMIT_HOOK_TYPE" = "pre-push" ]; then while read local_ref local_sha remote_ref remote_sha; do # 跳过删除分支的推送 if [ "$local_sha" = "0000000000000000000000000000000000000000" ]; then continue fi # 检查该批次所有提交的信息 bad_commits=$(git log --no-merges --grep 'AB#[0-9]' --invert-grep --format="%h %s" $remote_sha..$local_sha) if [ -n "$bad_commits" ]; then echo "错误:以下提交未包含符合格式的Azure Boards工单号:" echo "$bad_commits" echo "需补充AB#加数字格式的工单号(示例:AB#0001)" exit 1 fi done exit 0 fi # commit-msg阶段校验单条提交信息 commit_msg=$(cat "$1") if ! grep -qE 'AB#[0-9]+' <<< "$commit_msg"; then echo "错误:提交信息未包含符合格式的Azure Boards工单号,需包含AB#加数字的格式(示例:AB#0001)" exit 1 fi exit 0 - 第四步:激活钩子
执行以下命令:chmod +x .git/hooks/check_azure_workitem.sh pre-commit install --hook-type commit-msg --hook-type pre-push
多仓库批量配置方案
如果需要将规则批量应用到所有名下仓库,可通过Git全局模板实现:
- 执行命令
mkdir -p ~/.git-templates/hooks创建全局Git模板目录 - 执行命令
git config --global init.templatedir '~/.git-templates'配置全局模板路径 - 将上述
check_azure_workitem.sh脚本放入~/.git-templates/hooks目录下,执行chmod +x ~/.git-templates/hooks/check_azure_workitem.sh赋予执行权限 - 后续新克隆的仓库会自动加载该脚本,已有仓库可在仓库根目录执行
git init重新加载模板即可生效
验证方式
- 测试提交
git commit -m "initial commit"会被直接拦截 - 测试提交
git commit -m "Initial Commit AB#0001"可正常通过校验完成提交
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

