Files
2nd/10_Wiki/Topics/Programming & Language/Git Hooks.md
T

4.2 KiB

id, category, confidence_score, tags, last_reinforced, github_commit
id category confidence_score tags last_reinforced github_commit
P-REINFORCE-AUTO-F69A27 10_Wiki/💡 Topics/Programming & Language 0.90
auto-reinforced
2026-04-20 [P-Reinforce] Continuous Worker - Git Hooks

Git Hooks

📌 한 줄 통찰 (The Karpathy Summary)

Git Hooks는 Git 워크플로의 특정 이벤트(commit, push, merge 등)가 발생할 때 자동으로 실행되도록 설정할 수 있는 셸 스크립트 또는 실행 가능한 프로그램입니다 [1-3]. 주로 개발자가 코드를 커밋하거나 푸시하기 직전에 린트(Lint), 코드 포맷팅, 테스트 등을 실행하여 오류가 있는 코드가 리포지토리에 저장되는 것을 방지하고 코드 퀄리티를 일관되게 유지하는 역할을 합니다 [4, 5].

📖 구조화된 지식 (Synthesized Content)

  • 위치 및 구동 방식 기본적으로 Git Hook 스크립트들은 프로젝트의 .git/hooks/ 폴더에 위치합니다 [3, 6]. Git은 core.hooksPath가 가리키는 경로의 스크립트들을 확인하여 특정 Git 명령이 실행되기 전후에 이를 호출하며, 실행 권한이 부여되지 않은 Hook은 무시됩니다 [3].

  • 버전 관리의 한계와 해결책 .git/hooks/ 디렉터리는 버전 관리(Version Control) 시스템에 의해 추적되지 않기 때문에, 새로운 팀원에게 설정이 자동으로 공유되지 않으며 리포지토리를 다시 클론할 때마다 설정이 유실되는 단점이 있습니다 [6]. 이를 해결하기 위해 개발 생태계에서는 Husky와 같은 도구를 도입하여 Hook 스크립트를 .husky/와 같이 추적 가능한 폴더에서 관리하도록 core.hooksPath 설정을 자동화합니다 [6, 7].

  • 주요 Client-side Hooks 종류

    • pre-commit: 커밋이 생성되기 직전에 실행되며 스테이징된 파일의 포맷팅이나 린트 검사를 수행하는 데 주로 쓰입니다 [1, 2, 8]. 매우 빠르게 실행되어야 하며, git commit --no-verify 명령을 통해 우회할 수 있습니다 [8, 9].
    • prepare-commit-msg: 커밋 메시지 편집기가 열리기 전에 실행되어 메시지 템플릿 삽입 등을 처리하며, 우회할 수 없는 특수한 Hook입니다 [1, 8].
    • commit-msg: 작성된 커밋 메시지 형식을 유효성 검사하는 데 쓰입니다 [1, 2, 8].
    • post-commit: 커밋이 완료된 후 호출됩니다 [1].
    • pre-push: 원격 저장소에 푸시(push)되기 직전에 실행됩니다 [2, 8, 10]. 상대적으로 실행 시간이 오래 걸리는 전체 테스트 스위트 실행이나 빌드 검증 작업이 이곳에 배치됩니다 [9, 11].
    • post-merge: 병합(merge) 작업이 완료된 후 실행됩니다 [2].
  • 최적화 방법론 (Lint-staged 결합) pre-commit Hook에서 전체 프로젝트를 대상으로 ESLint나 Prettier를 실행하면 시간이 오래 걸려 개발자들의 불만을 초래할 수 있습니다 [6, 9]. 따라서 변경사항이 발생하여 커밋 대기 상태가 된 파일(Staged files)에 대해서만 린트 및 포맷팅 검사를 수행하도록 lint-staged를 결합하는 것이 일반적이며 이를 통해 검사 시간을 크게 단축할 수 있습니다 [5, 6, 12, 13].

⚠️ 모순 및 업데이트 (Contradictions & RL Update)

  • 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
  • 정책 변화: Programming & Language 분야의 자동 자산화 수행.

🔗 지식 연결 (Graph)

  • Related Topics: [[Husky]], [[lint-staged]], [[ESLint]], [[Prettier]]
  • Projects/Contexts: CI/CD 파이프라인 (CI/CD Pipelines), [[코드 품질 관리 및 자동화 (Code Quality Management and Automation)]]
  • Contradictions/Notes: 소스에 따르면 Git Hook은 개발자가 강제로 우회(--no-verify 등)할 수 있으므로 절대적이고 완벽한 강제 수단이 될 수는 없습니다. 따라서 Hook은 로컬 환경에서 빠른 피드백을 제공하기 위한 도구로 취급되어야 하며, 최종적인 보안 및 품질 검증의 권한은 항상 CI(지속적 통합) 서버가 담당해야 한다고 강조합니다 [8, 14, 15].

Last updated: 2026-04-18