[개발 및 협업]git hook 과 pre-commit

건너별·2022년 6월 17일
0

git

목록 보기
2/4
post-custom-banner

git hooks

  • 특정 상황에서 특정 스크립느를 실행할 수 있도록 하는 기능
  • 아무 레포지토리나 클론한 후 .git/hooks를 확인해 보자.

  • 이 13개의 sample들이 git에서 지원하는 hook의 전부
  • 특정 상황에 특정 스크립트를 실행하는 것이고, 13개의 특정 상황이 있다고 이해할 수 있음
  • 여기서 확장자(.sample) 만 제거해도 해당 hook이 활성화됨

pre-commit 이란?

  • 커밋할 때 가장 먼저 호출되는 hook
  • black, isort, flake8 등 가독성과 코드 퀄리티를 높여주는 tool을 자동화시켜주는 tool
  • 다시말해 목적은, Git으로 커밋(commit)을 남길 때 마다 특정 작업을 자동으로 실행하는 것
  • 언어에 상관없이 사용 가능
$ pip install pre-commit

pre-commmit-config.yaml

  • pre-commit 적용을 위한 yaml 파일

    [https://www.youtube.com/watch?v=XFyLzr5Ehf0]

  • flake8, isort

hook의 개념

  • commit message 이전에 운영되는 것
  • commit되기 직전의 snapshot을 조사함.

isort

  • import module들 정렬

black

  • Python Code formatter
  • 코드 읽기를 더 빠르고 실행을 더 스피디하게 할수 있도록 보완해줌
  • 디테일한 부분은 아래와 같은 것들이 있음
    - code 길이가 88 (PEP 8과 달리)
    • string에는 무조건 큰따옴표(")
    • 함수에 들어가는 argument가 너무 많으면 line별로 나누어줌
  • pyproject.toml 파일 안에 있는 black 파일의 config 예시
       [tool.black]
    line-length = 79
    include = '\.pyi?$'
    exclude = '''
    /(
       \.git
     | \.hg
     | \.mypy_cache
     | \.tox
     | \.venv
     | _build
     | buck-out
     | build
     | dist
    )/
    '''

flake

  • PEP8 과의 협응성을 검토하는 hook
  • 쓰지 않는 import와 같은 것들 정리
  • black 이 하지 못한것들을 잡아줌
[flake8]
ignore = E203, E266, E501, W503, F403, F401
max-line-length = 79
max-complexity = 18
select = B,C,E,F,W,T4,B9

PEP8 이란

  • Python Enhancement proposal 이라고 불리는 ,파이썬 코딩 규약

pre-commit pipeline with black and flake8

정리👨‍⚕️

  • git hook 이라는 여러 상황에 맞게 실행되는 스크립트가 있다. .sample을 지우면 활성화된다.
  • 그중에서도 pre-commit은 git commit시 실행되는 대표적인 hook이다.
  • yaml이나 toml과 같은 config 파일을 통해서 black, flake8 , isort 등을 commit 시 자동적용 시킬수있다.
  • 결과적으로 가독성있고 퀄리티 좋은 코드 형식으로 자동 점검되게끔 설정이 가능하다!

Reference

profile
romantic ai developer
post-custom-banner

0개의 댓글