커밋 메시지가 특정 스타일 가이드를 준수하는지 확인하는 프로젝트 commit-msg
용 후크를 작성 하려고 합니다 . git
그러나 정규식의 경우 다르게 작동하는 것이 있는 것 같습니다 bash
. 내 목표를 어떻게 달성할 수 있나요?
#!/usr/bin/env bash
read -r -d '' pattern << EOM
(?x) # Enable comments and whitespace insensitivity.
^ # Starting from the very beginning of the message
(feat|fix|docs|style|refactor|test|chore) # should be a type which might be one of the listed,
:[ ] # the type should be followed by a colon and whitespace,
(.{1,50})\n # then goes a subject that is allowed to be 50 chars long at most,
(?:\n((?:.{0,80}\n)+))? # then after an empty line goes optional body each line of which
# may not exceed 80 characters length.
$ # The body is considered everything until the end of the message.
EOM
message=$(cat "${1}")
if [[ ${message} =~ ${pattern} ]]; then
exit 0
else
error=$(tput setaf 1)
normal=$(tput sgr0)
echo "${error}The commit message does not accord with the style guide that is used on the project.${normal}"
echo "For more details see https://udacity.github.io/git-styleguide/"
exit 1
fi
나는 또한 이 정규식을 다음과 같이 온라인으로 작성해 보았습니다.
pattern="^(feat|fix|docs|style|refactor|test|chore):[ ](.{1,50})\n(?:\n((?:.{0,80}\n)+))?$"
\n
교체 를 시도했지만 $'\n'
도움이되지 않았습니다.
답변1
Bash는 POSIX 확장 정규식(ERE)을 지원하지만 Perl 호환 정규식(PCRE)은 지원하지 않습니다. 특히 (?x)
및 (?:...)
PCRE입니다.
(?:...)
로 바꾸면 한 줄 버전을 간략하게 살펴 볼 수 있습니다 (...)
. Perl x
수정자가 제공하는 "공백 무시" 기능은 확장 정규식에서는 사용할 수 없습니다.