regex - git commit-msg 钩子的正则表达式
问题描述
我正在尝试为 git commit msg 实现以下结构:
X=Uppercase character
Y=Number 0-9
category=fix, chore, doc, etc...
XXXXY-YYY [category] XXXXX*
这是我的提交消息文件
MSG_FILE=$1
FILE_CONTENT="$(cat $MSG_FILE)"
# Initialize constants here
export REGEX="\D\D\D\D\d-\d\d\d \[(fix|poc|chore|feat|refactor|style|test)\] .*"
export ERROR_MSG="Commit message format must match regex \"${REGEX}\""
if [[ $FILE_CONTENT =~ $REGEX ]]; then
echo "Nice commit!"
else
echo "Bad commit \"$FILE_CONTENT\", check format."
echo $ERROR_MSG
exit 1
fi
exit 0
但我得到的只是:
$ git commit -m "PBCL2-666 [fix] whatever"
Bad commit "PBCL2-666 [fix] whatever", check format.
Commit message format must match regex "\D\D\D\D\d-\d\d\d \[(fix|poc|chore|feat|refactor|style|test)\] .*"
有任何想法吗?
解决方案
您在 Bash 中使用正则表达式,因此使用 POSIX ERE 正则表达式引擎。
POSIX ERE 无法识别\D
匹配任何非数字字符的构造。用于[0-9]
匹配数字(或[[:digit:]]
)和[^0-9]
(或[^[:digit:]]
)匹配非数字。
但是,您需要[[:upper:]]
匹配任何大写字母。
FILE_CONTENT="PBCL2-666 [fix] whatever"
# ....
ERROR_MSG="Commit message format must match regex \"${REGEX}\""
REGEX="^[[:upper:]]{4}[0-9]-[0-9]{3} \[(fix|poc|chore|feat|refactor|style|test)] .*"
if [[ $FILE_CONTENT =~ $REGEX ]]; then
echo "Nice commit!"
else
echo "Bad commit \"$FILE_CONTENT\", check format."
echo $ERROR_MSG
exit 1
fi
请参阅在线 Bash 演示。
注意我^
在开始时添加以确保匹配仅从字符串的开头开始。
推荐阅读
- javascript - 如何向图像滑块添加过渡/动画?
- r - 在 GLM 分析中使用小鼠输入的数据集;可以获得合并模型拟合指数吗?
- vba - VBA Word 宏选择插入的形状
- python - 如何在地图上绘制一些引用的标签?使用卡托比
- python-3.x - Python 类,更新
- mongodb - 您如何将标签与消息传递应用程序中的消息和用户相关联?
- php - Laravel 中的 Storage::copy 不会复制大文件 Perfect
- c++ - 如何在 C++ 中制作对角线形状?
- python - 我想在 python 中的小部件中添加几个元素,它崩溃了
- linux - 缺页时如何通过虚拟地址找到唯一的交换页