git commit-msg 钩子的正则表达式
Regex for git commit-msg hook
我正在尝试为 git 提交消息实现以下结构:
X=Uppercase character
Y=Number 0-9
category=fix, chore, doc, etc...
XXXXY-YYY [category] XXXXX*
这是我的提交消息文件
MSG_FILE=
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
注意我在开头添加了 ^
以确保匹配仅从字符串的开头开始。
我正在尝试为 git 提交消息实现以下结构:
X=Uppercase character
Y=Number 0-9
category=fix, chore, doc, etc...
XXXXY-YYY [category] XXXXX*
这是我的提交消息文件
MSG_FILE=
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
注意我在开头添加了 ^
以确保匹配仅从字符串的开头开始。