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

pre-commit中pygrep正则校验提交信息始终返回True如何解决

问题原因
  • 核心逻辑与pygrep默认判定规则相反:pygrep钩子的默认校验逻辑是扫描输入内容,匹配到entry定义的正则则判定校验失败,无匹配内容则判定校验通过。你当前配置的正则是匹配符合要求的提交格式,当提交信息完全不符合格式(比如why)时,正则匹配不到任何内容,pygrep会直接判定校验通过,和预期逻辑完全倒置。
  • 正则缺少边界锚定:原有正则未加行首^、行尾$锚点,即使修正匹配逻辑,也会出现“提交信息任意位置夹带符合格式的片段即判定合规”的问题,比如test ERP-123 #fix 问题这类前后带无关内容的提交会被误判为通过。
修正配置

调整两个点即可实现正确校验:

  1. 给正则添加行首锚定,强制提交信息从开头就匹配格式规则
  2. 在args中添加--negate参数,反转pygrep的匹配逻辑:匹配不到合规格式时判定失败,匹配到时判定通过

修正后的完整配置如下:

- repo: local
    hooks:
      - id: jira-ticket
        name: check for jira ticket
        entry: '^ERP-[0-9]+ #(feat|fix|docs|style|refactor|perf|test|chore) .+'
        args: [--multiline, --negate]
        language: pygrep
        stages: [commit-msg]

补充说明

  • 上述配置默认校验commit message首行符合格式要求,首行后可以空行追加提交正文,符合通用git提交规范。如果需要强制整个提交信息只能有格式对应的一行内容,只需要在正则末尾添加行尾锚定$,将entry修改为'^ERP-[0-9]+ #(feat|fix|docs|style|refactor|perf|test|chore) .+$'即可。
  • 修正后执行git commit -m "why"这类不符合格式的提交时,钩子会直接返回失败拦截提交;提交ERP-234 #feat 新增采购单合并功能这类符合格式的信息时才会校验通过。

内容的提问来源于stack exchange,提问作者CHIU TZE CHEUNG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:27:34