You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git commit-msg钩子正则优化:匹配两种合法提交消息格式

Git Commit-Msg钩子正则优化方案

问题背景

为Git的commit-msg钩子编写正则时,现有规则仅能校验到-符号之后的任意内容,无法实现两种提交格式的严格校验:

  1. 当-后以(开头时,需验证括号成对,且闭括号后必须跟空格:空格+提交描述
  2. 当-后以字母数字开头时,直接匹配普通提交描述

之前尝试的析取正则因第二个分支.+会匹配所有内容导致规则失效,同时需要拦截以下无效格式:

  • GRP-0988 FIX CORE - (Some change) (括号后无:和描述)
  • GRP-0988 FIX CORE - (Some change) - Some description (括号后格式错误)
  • GRP-0988 FIX CORE - ( (括号未闭合且无内容)
  • GRP-0988 FIX CORE - () (括号内为空)
  • GRP-0988 FIX CORE - (Some change (括号未闭合)
  • GRP-0988 FIX CORE - Some change) (以)开头的描述)

解决方案

调整正则分支顺序,优先匹配更具体的格式,同时限制括号内内容和描述的合法性:

/^GRP\-[0-9]+\s(FIX|CHANGE|HOTFIX|FEATURE)\s(CORE|SHARED|ADM|CSR|BUS|OTHER)\s-\s(?:\([^)]+\)\s:\s[a-zA-Z0-9].+|[a-zA-Z0-9].+)$/

规则说明

  • ^和$:确保整个提交消息完全匹配,避免前后多余内容
  • (?:...):非捕获组,用于包裹两个格式分支,不产生额外捕获结果
  • 第一个分支\([^)]+\)\s:\s[a-zA-Z0-9].+:
    • \([^)]+\):匹配成对的括号,且括号内必须有非空内容([^)]+匹配除)外的任意字符)
    • \s:\s:强制括号后跟随空格:空格的格式
    • [a-zA-Z0-9].+:确保描述以字母数字开头,且有后续内容
  • 第二个分支[a-zA-Z0-9].+:确保普通描述以字母数字开头,拦截以特殊字符(如))开头的无效内容

验证效果

  • 有效格式均可匹配:
    1. GRP-0888 FIX OTHER - (jest.config.js) : Fix testMatch option issue
    2. GRP-0888 FIX OTHER - Fix testMatch option issue
  • 所有列出的无效格式均会被拦截,无法通过校验

内容的提问来源于stack exchange,提问作者Norayr Ghukasyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 18:46:43