git에 특정 조건을 걸어서 메시지등을 출력하는 hook이라는 기능이 있다.
(더 상세한 내용은 이 블로그 말고 다른곳을 검색해보기 바란다)
훅을 처음 써보면서, shell script도 제대로 쓸줄몰라 엄청 해멨으나 일단 원하는걸 하나 구현해놨기에 기록해둔다.
원하는건 코드 컨벤션을 맞추기 위해 설정한 문구 중
모든 코드 스타일을
void foo()
{
codes;
}
방식으로 픽스하기 위한 조건이었다.
그걸 위해, 검색해서 pre-commit 을 수정해보려고 하니... 에러가 뜬다.
error: cannot spawn .git/hooks/pre-commit: No such file or directory
대충 이런 문구다.
요약하면 pre-commit이라는 hook이 없다는 얘긴데...
정확한 이유는 파악하지 못했으나, git 용 hook에 필수적으로 포함되어야 하는 문구들이 있는 모양이었다.
해서, 검색을 통해 어떤 문구가 있어야하는지 파악을 해두고, 문구 적용을 시켜보도록 했다.
#단순히 ") {" 스타일이 들어오면 밴 먹임
disallowed="){"
git diff --cached --name-status | while read x file; do
if ["$x" == 'D']; then continue; fi #뭔 의미지? 'D'가 뭐지?
if grep ')\s{' $file ; then
echo "ERROR: 코드 스타일 에러입니다."
exit 1
fi
for word in "$disallowed"
do
if egrep $word $file ; then
echo "ERROR: Disallowed expression \"${word}\" in file: ${file}"
exit 1
fi
done
done || exit $?
완성된건 이런 스타일인데, 정리하면 다음과 같다.
1. disalowed에 "없어야 될 문자열"을 기록한다.
2. git에서 수정된 사항을 읽는다.
3 (은 이해를 못했습니다...)
4. 파일을 전체 검색하며, 조건에 맞는 문자열이 있는지 검사후, 조건에 만족하면 echo 메시지를 띄운 후 에러를 리턴한다.
5. 정상 통과 하면 while문을 종료시키고 끝낸다.
의 구조이다.
웃긴점은, 이를 좀 "있어보이게" / "다른 사용자들이 큰 수정할 필요없이" 적용을 시키기 위해 core.hooksPath를 수정해줬더니 저 hook 조차 에러를 검사하여 리턴해버리는게 아닌가...
해서, 이런 경우에는 hookspath를 임의로 수정해준 뒤, 커밋 갱신을 해줘야 하는 소소한 불편함(?)이 발생하고 있다.
해당 문서를 위해
woowabros.github.io/tools/2017/07/12/git_hook.html
훅으로 Git에 훅 들어가기 - 우아한형제들 기술 블로그
들어가며…
woowabros.github.io
singun.github.io/2019/03/16/git-hook-pre-commit/
특정 문자열이 커밋되는 것을 막아보자 - Programming Singun
페이스북이나 인스타그림 등의 open api를 사용하기 위해서는 인증을 위한 토큰 값이나 키 값을 사용해야 할 때가 있습니다. 민감할 수 있는 정보라 git 에 커밋하는게 그리 달갑지 않아, 이런 경우
singun.github.io
두 문서를 참고하였습니다. 감사합니다.
'프로그래밍 > 기타' 카테고리의 다른 글
필기노트 P-001 : OS 이론 2 (1) | 2021.07.20 |
---|---|
필기노트 P-001 : OS 이론 1 (0) | 2021.07.20 |
정보처리기사 2020 실기 속성 요약 (4) (0) | 2020.05.24 |
정보처리기사 2020 실기 속성 요약 (3) (0) | 2020.05.22 |
정보처리기사 2020 실기 속성 요약 (2) (0) | 2020.05.22 |