Git 훅스 활용: 커밋 및 푸시 전 자동 검증 시스템 구축
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
- 소프트웨어 개발자 및 DevOps 엔지니어
- 중간~고급 수준의 Git 및 CI/CD 이해도
- 코드 품질 관리, 자동화 프로세스 설정에 관심 있는 개발자
핵심 요약
pre-commit
/pre-push
훅스는 커밋/푸시 전 코드 검증을 자동화pre-commit
: ESLint, Pylint 등 코드 스타일 검사 및 단위 테스트 실행pre-push
: 브랜치 보호(main 직접 푸시 차단), 의존성 검증(package-lock.json 업데이트 확인)- Husky 도구를 통해
package.json
기반 훅스 설정 가능 npm install husky --save-dev
후npx husky add .husky/pre-commit "npm test"
명령어 사용.git/hooks
디렉토리에 직접 훅스 스크립트 저장chmod +x
명령어로 실행권한 부여 필요
섹션별 세부 요약
1. Git 훅스 기초 개념
- Git 훅스 정의: 커밋, 푸시, 머지 등 특정 이벤트 전후에 자동 실행되는 스크립트
- 주요 이점:
- 코드 품질 강화 (ESLint, RuboCop 등)
- 암호/기밀 정보 커밋 방지
- 테스트 실패 시 커밋/푸시 중단
- 예시 훅스:
pre-commit
:eslint .
실행pre-push
:git symbolic-ref --short HEAD
로 현재 브랜치 확인
2. 훅스 설정 및 실행 방법
.git/hooks
디렉토리 확인:cd your-repo/.git/hooks
ls -la
명령어로 샘플 훅스(pre-commit.sample
) 확인- 활성화 프로세스:
.sample
확장자 제거:mv pre-commit.sample pre-commit
- 실행권한 부여:
chmod +x pre-commit
- 실행 예시 스크립트:
```bash
# ESLint 실행 예시
echo "Running ESLint..."
eslint .
if [ $? -ne 0 ]; then
echo "ESLint found errors. Commit aborted."
exit 1
fi
```
3. 훅스 활용 사례
- JavaScript 프로젝트:
pre-commit
스크립트:black --check .
(코드 포맷 검사) +pytest
(단위 테스트 실행)- Python 프로젝트:
pre-push
스크립트:main
브랜치로의 직접 푸시 차단if [ "$current_branch" = "main" ]; then echo "Pushing directly to 'main' is not allowed." exit 1; fi
- 의존성 검증:
package-lock.json
파일 업데이트 여부 확인
4. Husky 도구 활용
- Husky 설치:
npm install husky --save-dev
npx husky init
명령어로 초기화- 훅스 설정:
npx husky add .husky/pre-commit "npm test"
명령어로pre-commit
훅스 생성- 장점:
package.json
기반 훅스 관리 가능- 훅스 스크립트를
.husky/
디렉토리에 저장
5. 훅스 관리 팁
- 명령어로 훅스 무시:
git commit --no-verify
(pre-commit 훅스 스킵)git push --no-verify
(pre-push 훅스 스킵)- 버전 관리 문제 해결:
.git/hooks
디렉토리가 버전 관리 대상이 아님hooks/
디렉토리에 스크립트 저장 후.git/hooks/
에 복사cp hooks/pre-commit .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit
결론
- Git 훅스는 자동화된 코드 품질 검증의 핵심 도구
- Husky 사용을 통해
package.json
기반으로 훅스 관리 시 효율성 향상 pre-commit
/pre-push
훅스 스크립트 작성 시chmod +x
명령어로 실행권한 부여 필수