본문 바로가기
개발환경

[Git] Git Hook (pre-commit) | LIM

by forestlim 2023. 11. 21.
728x90
반응형

1. Git Hook 이란?

Git에서 어떠한 이벤트(commit, push..) 가 발생했을 때 특정 스크립트를 실행하도록 하는 것이다.

다양한 종류가 있다.

- pre-commit

- prepare-commit-msg

- pre-push

- commit-msg

...

해당 hook 종류는 git으로 관리되고 있는 프로젝트에 들어가서 .git/hooks 로 들어가면 확인할 수 있다.

 

나는 그 중 pre-commit 을 이용해서 dbt 에서 특정 모델에 대한 tag 관리 및 description 관리 등을 수행했다.

 

2. Pre-Commit 설정하기

크게 두 가지 방법이 있다. 로컬에서 설정해서 내 로컬에서만 적용되게끔 하는 경우와 다른 팀원들과의 공유를 통해 팀 전체에서 동일한 git hook 을 사용할 수 있도록 하는 방법이다.

 

📌 개인 로컬에서만 설정하는 경우

먼저, 내 개인 로컬에서만 사용하려면 .git/hooks 폴더로 이동해서 pre-commit.sample 로 되어 있는 파일 명을 pre-commit 으로 바꾸거나 새롭게 추가한다. 

 

그 파일에 shell script 로 commit 전에 체크하고자 하는 로직을 넣어주면 된다.

 

📌 다른 팀원들과 공유하는 경우

git hook 파일을 git으로 관리해 다른 팀원들과 동일하게 hook 을 사용하고자 하는 경우 pre-commit 라이브러리를 install 해줘야 한다.

 

설치

pip install pre-commit

 

파일 생성(해당 프로젝트 root directory에)

touch .pre-commit-config.yaml

 

 

사용자 정의 훅을 실행하기 위해서는 .pre-commit-config.yaml 파일에 repo 값을 'local'로 설정하면 된다.

(추가로 훅을 더 추가하려면 아래에 더 추가해주면 된다.)

repos:
  - repo: local
    hooks:
      - id: check-owner
        name: Check Owner In Model
        entry: ./hooks/check-owner.sh
        language: script
        types: [file]
        files: \.yml$

 

  • repo: local → 사용자 정의 훅
  • id: check-owner → hook id
  • name: Check Owner In Model → hook name
  • entry: ./hooks/check-owner.sh → 어떤 shell 파일을 바라볼 건지
  • language: script → shell script 로 작성
  • types: file → file 을 체크함
  • files: \.yml$ → .yml 로 끝나는 파일만 체크함

 

실행 권한 추가

chmod +x hooks/check-owner.sh

Git 은 파일 실행 권한을 추적함

(따라서 chmod +x hooks/check-owner.sh 를 git pull 한 다른 사람들은 할 필요 없음)

 

pre-commit 훅 설치

pre-commit install

 

3. Pre-Commit 사용

다음과 같이 세 가지 종류가 있다.

 

 

Check Owner In Model ...........................(no files to check)Skipped

- 체크할 파일이 없고 commit 이 된 경우

 

Check Owner In Model ...............................................Passed

- 체크할 파일이 있었지만 문제가 없어서 commit 이 된 경우

 

Check Owner In Model ...............................................Failed

- 체크할 파일에 문제가 있어서 commit 이 안 된 경우

 

 

만약, Failed 가 발생한 경우 코드를 조건에 맞게 수정하고 다시 add -> commit 해주면 된다.

 

 


Git Hook 을 잘 사용하면 배포되기 전에 필요한 요소들에 대해 점검할 수 있어서 팀원들이 놓치기 쉬운 부분이나 항상 통일해야 하는 부분을 잘 체크할 수 있다. 

 

체크하는 것들이 너무 많아지면 피곤해지겠지만 요즘 드는 생각은 배포가 너무 쉽게 되서는 안된다는 생각이 있다. 

 

무언가를 잘 관리하려면 배포가 너무 쉽게 이루어지면 안되는 것 같다.

728x90
반응형

댓글