46 lines
4.5 KiB
Markdown
46 lines
4.5 KiB
Markdown
---
|
|
id: P-REINFORCE-AUTO-F69A27
|
|
category: "10_Wiki/💡 Topics/Programming & Language"
|
|
confidence_score: 0.90
|
|
tags: [auto-reinforced]
|
|
last_reinforced: 2026-04-20
|
|
github_commit: "[P-Reinforce] Continuous Worker - Git Hooks"
|
|
---
|
|
|
|
# [[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|Husky]]`, `[[lint-staged|lint-staged]]`, `[[ESLint|ESLint]]`, `[[Prettier|Prettier]]`
|
|
- **Projects/Contexts:** `[[CI_CD 파이프라인 (CI_CD Pipelines)|CI/CD 파이프라인 (CI/CD Pipelines)]]`, `[[코드 품질 관리 및 자동화 (Code Quality Management and Automation)|코드 품질 관리 및 자동화 (Code Quality Management and Automation)]]`
|
|
- **Contradictions/Notes:** 소스에 따르면 Git Hook은 개발자가 강제로 우회(`--no-verify` 등)할 수 있으므로 절대적이고 완벽한 강제 수단이 될 수는 없습니다. 따라서 Hook은 로컬 환경에서 빠른 피드백을 제공하기 위한 도구로 취급되어야 하며, 최종적인 보안 및 품질 검증의 권한은 항상 CI(지속적 통합) 서버가 담당해야 한다고 강조합니다 [8, 14, 15].
|
|
|
|
---
|
|
*Last updated: 2026-04-18*
|
|
- Raw Source: 00_Raw/2026-04-20/Git Hooks.md
|
|
---
|