본문 바로가기
프로그래밍

husky 를 통해 Git 훅 적용

by spare8433 2025. 1. 4.

설명

Husky는 Git Hook을 더 쉽게 관리하고, 팀 협업에서 일관성을 유지할 수 있도록 돕는 JavaScript 라이브러리입니다.



가볍고 빠르며 광범위한 지원으로 다양한 환경과 워크플로어에 쉽게 통합해 사용 가능합니다.




기능

  • Git Hook 설정 자동화: Git Hook을 직접 작성하지 않고, package.json 또는 설정 파일에서 간단히 관리 가능.
  • Node.js와 통합: JavaScript를 사용하여 Git Hook 스크립트를 작성 가능하다.
  • 일관성 유지: 프로젝트의 Git Hook 설정을 팀원과 공유 가능.
  • 가볍고 빠름 (2KB, runs in ~1ms )
  • custom directory : git 설정 옵션 core.hooksPath 설정하여 custom hooks 의 directory 따로 관리 가능.
  • 브랜치별 훅: 특정 브랜치에만 적용되는 훅 작성 가능.
  • POSIX 셸 스크립팅: 복잡한 스크립트 작성 가능.
  • Git의 모든 클라이언트 훅 지원: 13가지 클라이언트 사이드 Git 훅 사용 가능 (예: pre-commit, post-merge 등등).
  • Git의 네이티브 훅 구조 준수: Git의 기본 훅 구성 방식과 호환되도록 설계.




설치 및 세팅


1. 설치

pnpm add --save-dev husky




2. 초기 세팅

pnpm exec husky init

  • .husky 디렉토리를 생성.
  • Git의 Hook 경로를 .husky로 설정 (git config core.hooksPath .husky 실행).
    • core.hooksPath 옵션 : Git이 사용자 정의 Git Hook 스크립트를 찾는 디렉토리를 지정하는 데 사용됩니다. (Git의 기본 Hook 경로는 .git/hooks/)
  • 선택적으로 기본 Git Hook 파일(예: pre-commit)을 생성합니다.
  • package.json 세팅 : husky 패키지가 설치 시 자동으로 실행
      "scripts": {
        "prepare": "husky"
      },




3. lint-staged 세팅 (선택)

Git의 Staged 파일에 대해서만 린트(Lint)나 기타 스크립트를 실행할 수 있게 해주는 도구



# 설치
pnpm add --save-dev lint-staged

// package.json 설정
...,
"lint-staged": {
  "*.{js,jsx,ts,tsx}": [
    "eslint --fix --max-warnings=0"
  ]
},



ex) 사용 예제

# husky/pre-commit
#!/bin/sh

echo "🔍 commit 이전에 lint 규칙을 적용합니다..."
if pnpm dlx lint-staged; then
  echo "✅ 모든 lint 규칙이 성공적으로 적용되었습니다."
  exit 0
else
  echo "❌ lint 규칙 검사에서 오류가 발생했습니다."
  exit 1
fi



사용법

git hook 이 실행 될 때 .husky/ 하위에 git hook 명과 동일한 파일에 내용이 실행됩니다.

1. git hook 추가 명령어

Husky는 Git 훅을 간단히 추가할 수 있도록 명령어



# pre-commit 훅 추가
npx husky add .husky/pre-commit "npm test"

# commit-msg 훅 추가
npx husky add .husky/commit-msg "npx commitlint --edit $1"

# pre-push 훅 추가
npx husky add .husky/pre-push "npm run build"

2. 스크립트 수정

.husky/pre-commit 같은 훅 파일을 생성된 후, 직접 수정하거나 추가 작업을 정의할 수 있습니다.

.husky/ 하위에 git hook 명과 동일한 파일 생성해 사용





참고

https://typicode.github.io/husky/how-to.html