반응형
String Length 오류가 발생하는 원인
일반적으로 PC에서 동작하는 Bash에서 Bash 문자열 길이 구하기는 한글 문자열 길이를 인식하는데 문제가 없지만, Git Hook에 해당하는 Bash Script는 한글을 UTF-8로 인식하기 때문에 글자수가 많게 출력된다. 때문에 commit-msg를 한글로 입력하게 정책이 세워진 팀이나 단체라면 의도치 않게 제한된 문자열 길이를 늘려 사용하고는 한다.
하지만 Script 내, LC_CTYPE 변수에 en_US.utf8 을 적용한 뒤에 길이 구하는 로직을 적용하면 한글을 포함하여 정확한 문자열 길이가 출력할 수 있다.
대응 코드
#!/bin/sh
#
# An example hook script to check the commit log message.
# Called by "git commit" with one argument, the name of the file
# that has the commit message. The hook should exit with non-zero
# status after issuing an appropriate message if it wants to stop the
# commit. The hook is allowed to edit the commit message file.
#
# To enable this hook, rename this file to "commit-msg".
# Uncomment the below to add a Signed-off-by line to the message.
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
# hook is more suited to it.
#
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
# This example catches duplicate Signed-off-by lines.
LC_CTYPE=en_US.utf8
filename="$1"
# copy=$(tempfile -p gitco)
# cat $filename >> $copy
lineno=0
error() {
echo "{"
echo " Error : hooks/commit-msg"
echo " Message : INAPPROPRIATE LOG MESSAGE FORMATTING"
echo " Detail : $1!"
echo "}"
# echo ""
# echo "Original checkin message has been stored in '_gitmsg.saved.txt'"
# mv $copy '_gitmsg.saved.txt'
exit 1
}
while read -r line
do
# Ignore comment lines (don't count line number either)
[[ "$line" =~ ^#.* ]] && continue
v_utf8=$line
let lineno+=1
length=${#v_utf8}
# Subject line tests
if [[ $lineno -eq 1 ]]; then
[[ $length -gt 50 ]] && error "Limit the subject line to 50 characters // Current : $length"
[[ "$line" == *. ]] && error "Do not end the subject line with a period"
fi
# Rules related to the commit message body
[[ $lineno -eq 2 ]] && [[ -n $line ]] && error "Separate subject from body with a blank line"
[[ $lineno -gt 1 ]] && [[ $length -gt 72 ]] && error "Wrap the body at 72 characters"
done < "$filename"
# rm -f $copy
exit 0
위의 코드는 커밋할 때, 메세지에 대해
제목 줄은 50자 이하,
바로 다음 줄은 공백이 존재 필수,
본문은 각 줄마다 72자 이하
로 입력을 해야한다는 내용이다.
728x90
'Git' 카테고리의 다른 글
Git 기본 명령어 모음 (기초) (0) | 2022.08.18 |
---|---|
Git이란? Git 사용방법 알아보기 (기초) (0) | 2022.08.17 |