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 을 잘 사용하면 배포되기 전에 필요한 요소들에 대해 점검할 수 있어서 팀원들이 놓치기 쉬운 부분이나 항상 통일해야 하는 부분을 잘 체크할 수 있다.
체크하는 것들이 너무 많아지면 피곤해지겠지만 요즘 드는 생각은 배포가 너무 쉽게 되서는 안된다는 생각이 있다.
무언가를 잘 관리하려면 배포가 너무 쉽게 이루어지면 안되는 것 같다.
'개발환경' 카테고리의 다른 글
Ubuntu 20.04 xrdp 설치 및 접속 (0) | 2023.07.14 |
---|---|
[Linux] Screen이란 무엇이고 어떻게 사용하는가 | LIM (0) | 2023.02.10 |
[Linux] FTP 서버 구축기(feat. GCP VM Instance) | LIM (0) | 2023.01.22 |
[Pycharm] SSH 원격 접속 | LIM (0) | 2022.12.24 |
[mac m1] jupyterlab 설치 및 실행 오류 | LIM (0) | 2022.06.24 |
댓글