1. 개요

pre-commitmulti-language pre-commit hook 관리 프레임워크입니다. Git에 커밋을 하기 전, 필요한 행위들을 워크플로우로 정의해두고 커밋을 하기 전 단계인 pre-commit 단계에서 해당 워크플로우를 실행해주어, 개발자가 놓치기 쉬운 부분들(linting, formatting, import optimization)을 자동화하여 해결해줍니다.

특징

  • 많고 많은 hooks 플러그인

  • 활발한 써드파티

  • 스크립트를 따로 작성할 필요 없이 제공되는 플러그인들을 설정파일에 정의하고 바로 실행 가능

    • 명령에 사용할 인수 설정 가능

    • 제외할 폴더들 명시 가능

  • hook을 제공하지 않더라도 command line을 실행 할 수 있게 설정 가능 함

  • multi-language support

    Open 스크린샷 2023-03-27 오후 2.11.04.png

  • 10k가 넘는 star (WOW)

2. 설치

pip을 사용

$ pip install pre-commit

brew 사용

$ brew install pre-commit

pre-commit 설정파일 추가

$ pre-commit sample-config > .pre-commit-config.yaml

  • 기본적으로 생성해둔 .pre-commit-config.yaml 파일이 있기에 위 명령어는 참고만 해주시면 될 것 같습니다.

pre-commit 설치

$ pre-commit install

pre-commit이 아닌 다른 git훅에서 실행을 원할 시,

$ pre-commit install --hook-type post-commit

pre-commit 삭제

$ pre-commit uninstall

3. 실행

기본적으로 pre-commit 단계에서 .pre-commit-config.yaml에서 설정한 hook들을 스테이징에 올라간 파일들을 대상으로 순차적으로 실행하게 되어있습니다.

또한, 전체 파일에 대하여 pre-commit 워크플로우를 cli로 실행하는 것 또한 가능합니다.

전체 실행

$ pre-commit run --all-files

특정 hook만 실행

$ pre-commit run <hook_id>

커밋 시 특정 hook을 제외하고 실행

$ SKIP=<hook_id> git commit -m "foo"

커밋 시 pre-commit을 무시하고 실행(not recommended)

$ PRE_COMMIT_ALLOW_NO_CONFIG=1 git commit -m "foo"

수동으로 실행할 (stage가 manual인) hook 실행(staging에 추가된 파일에 대해서 실행)

$ pre-commit run --hook-stage manual [hookid]

4. IntelliJ File Watchers 플러그인 기능을 통한 저장 시 실행 환경 구축

  1. Settings → Plugins → MarketPlace → File Watchers 검색 및 설치

    1. 재시작 요망

![[Pre-commit Workflow Management.png]]

File Watcher 플러그인 설치

  1. Settings → Tools → File Watchers → + 버튼 클릭 → 선택

![[Pre-commit Workflow Management (1).png]]

  1. 다음과 같이 셋팅한다.
  • 다른 훅 실행시, Arguments 항목에 run <hook_id> --files $FilePath$

![[Pre-commit Workflow Management (2).png]]

Links