Git 提交消息挂钩正则表达式

问题描述 投票:0回答:1

我想在 git 提交消息中使用正则表达式,以便只允许某种格式的提交消息。我希望用户以格式输入提交消息。

示例

BLGR-1234 BUG Alignment fix

BLGR-1234 XXXX ZZZZZZ

其中

BLGR-1234
指的是 jira 票号,其中 BLGR 是硬编码文本

XXXX
可以是故事|BUGFIX|重构|合并|文档

ZZZZ
应该是推送内容的描述。

我正在使用以下正则表达式

commit_regex='(^|\s+)BLGR-[0-9]+ (STORY|BUGFIX|REFACTOR|MERGE|DOCUMENT)[[:blank:]](([a-zA-Z0-9]+)(\s|_)*)+'

但是使用上面的正则表达式,如果我输入提交消息为

'Not proper regex BLGR-1234 BUG Alignment fix'
,钩子将允许此提交消息。有人可以告诉我如何解决这个问题吗? 粘贴我的提交消息挂钩文件

#!/usr/bin/env bash
commit_regex='BLGR-[0-9]+[[:blank:]](STORY|BUGFIX|REFACTOR|MERGE|DOCUMENT)[[:blank:]](([a-zA-Z0-9]+)(\s|_)*)+'
error_msg="Commit message format is incorrect." 
if ! grep -qE "$commit_regex" "$1"; then
    echo "$error_msg" >&2
    exit 1
fi
git hook git-commit
1个回答
0
投票

grep -E
不(可移植)支持像
\s
这样的 Perlism;您是否检查过如果手动运行此脚本是否有效?

此外,如果没有

-x
^
$
锚点,您将检查正则表达式是否与任何输入行上的任何位置匹配,而不是检查它是否匹配整行 - 即使如此,
grep
也可能是错误的工具以验证是否还有其他线路。

试试这个:

#!/usr/bin/env bash
awk '!/^[ \t]*BLGR-[0-9]+[ \t]+(STORY|BUGFIX|REFACTOR|MERGE|DOCUMENT)[ \t]+([a-zA-Z0-9]+[ \t_]*)+[ \t]*$/
    || NR>1 { exit 1 }' ||
{ echo "$0: Commit message format is incorrect." >&2
  exit 1; }

这对于重复的空格比正则表达式更宽松;或许可以去掉可选的前导和尾随空白(尽管后者尤其可能难以排除故障)和可选的内部空白重复。

© www.soinside.com 2019 - 2024. All rights reserved.