펭귄맨 : GitHub 세팅 - part 2
1. 서
part1에 이어 GitHub 세팅을 마무리 해보자. part1에서는 1) 로컬 저장소를 생성하여 원격저장소와 연동을 시켰고, 2) commit template을 설정하였으며 3) issue 생성 부터 commit과 push, pull request 그리고 develop 브랜치에서 main 브랜치로의 merge까지 이어지는 한 사이클을 수행해 보았다. part2에서는 1) git ignore, 2) issue 및 PR template 설정 , 3) pre-commit 을 이어서 진행한다. 일단 issue 생성부터 하고 시작해보자.
2. GitHub 세팅 프로세스 (part 1에 이어서)
(1) git ignore 파일 추가
.gitignore 파일은 깃 버전 관리에서 제외할 파일을 지정하는 설정파일이다. 프로젝트에 포함시키지 않을 파일들을 지정하여 불필요한 파일이 저장소에 포함되는 것을 방지할 수 있다.
git ignore 파일은 아래의 사이트에서 생성하면 된다.
gitignore.io
Create useful .gitignore files for your project
www.toptal.com
위 사이트에서 키워드를 입력하면 자동으로 생성되는데, 여기서 키워드는 운영체제, 개발도구, 프로그래밍 언어 등이 있다. 펭귄맨은 윈도우에서 비주얼 스튜디오 코드를 통해 파이썬을 사용하여 진행하므로 아래처럼 생성할 수 있다.
딥러닝에서는 이미지 저작권이 문제가 되는 경우가 많기 때문에 이미지 확장자명을 gitignore에 추가하여 업로드를 방지하는 경우도 많다. 어쨌든 로컬 저장소에 .gitignore 파일을 만들고 이 파일에 위 사이트에서 생성된 내용을 복붙한다.
(2) issue 및 PR template
통일되고 일관된 작성을 위한 issue template과 PR template을 설정해 본다. 우선 이슈 템플릿, 풀 리퀘스트 템플릿 등 깃헙의 기능을 활용하기 위한 설정파일들이 저장되는 .github 디렉토리를 만들어 준다. 이 .github 디렉토리에 ISSUE_TEMPLATE 디렉토리와 PULL_REQUEST_TEMPLATE.md 파일이 존재하고, ISSUE_TEMPLATE 디렉토리에는 bug_report.yml, feature_request.yml, refactoring.yml 파일이 존재하도록 각각 생성한다.
생성된 파일들 각각에는 이하의 내용을 복붙해준다.
- PULL_REQUEST.md
## 개요
## 작업 사항
## 변경점
## 스크린샷 (optional)
## issue
- bug_report.yml
name: Bug Report
description: 버그 리포트
title: ":bug: fix : "
labels: ["bug"]
body:
- type: textarea
id: what-happened
attributes:
label: 증상
description: 무슨 문제가 발생 하였는지 설명해주세요.
validations:
required: true
- type: textarea
id: how-to-reproduce
attributes:
label: 재현 방법
description: 어떻게 버그를 재현하는지 설명해주세요.
validations:
required: true
- type: textarea
id: screenshot
attributes:
label: 스크린샷
description: 이해를 돕기 위해 스크린샷을 첨부해주세요.
- type: textarea
id: Expected-Behavior
attributes:
label: 기대하는 결과
description: 버그가 없었을 때 어떤 결과가 나왔어야 하는지 설명해주세요.
- type: textarea
id: logs
attributes:
label: 로그
description: 에러 로그를 복사해서 첨부해주세요.
render: Shell
- feature_request.yml
name: Feature Request
description: 새로운 기능 추가
title: ":sparkles: feat : "
labels: ["enhancement"]
body:
- type: textarea
id: feature
attributes:
label: 내용
description: 추가하고자 하는 기능에 대하여 설명해주세요.
value: |
-
validations:
required: true
- refactoring.yml
name: Refactoring
description: 코드 리팩토링
title: ":recycle: refactor : "
labels: ["refactoring"]
body:
- type: textarea
id: feature
attributes:
label: 내용
description: 리팩토링한 부분에 대하여 설명해주세요.
value: |
-
validations:
required: true
(3) pre-commit 설정 (+ 가상환경)
pre-commit은 git hook으로 커밋 전 코드 스타일과 포멧을 체크하고 수정해주는 역할을 한다. 아직 가상환경을 만들기 전이므로, 일단 가상환경 .venv를 만들고(.venv는 gitignore에 의해 버전관리에서 제외된다) 활성화 시킨후 pre commit을 설치해준다.
pre-commmit 적용을 위한 .pre-commit-config.yaml 설정 파일을 만들어야 한다. 다음 명령어를 입력한다.
위 yaml파일에 아래내용을 복붙해 준다.
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- repo: https://github.com/psf/black
rev: 24.3.0
hooks:
- id: black
language_version: python3.11
이제 아래 명령어를 입력하여 pre-commit을 등록한다.
3. 세팅 마무리
지금까지 로컬에서 작업한 것들을 원격 저장소에 반영시키면서 세팅이 잘 되었는지 확인해보자. 원래는 한 커밋당 이슈 하나를 담는게 바람직하지만, 이번에만 편의상 기초 세팅에 관한 이슈를 하나의 커밋으로 처리하기로 하자. git add. 후 git commit을 하자 무언가 진행되더니 fail이 뜬다. 포맷에 맞지 않은 파일이 있어 이것이 pre-commit에 의해 수정된 것이다.
pre-commit에 의해 파일이 수정되었을테니 다시 git add .를 해본다.
GPT한테 물어보니 Windows와 Linux 시스템 간의 줄바꿈 문자 호환성 문제라면서, 이는 git config --global core.autocrif true 명령어를 입력해서 해결할 수 있다고 한다.
어쨌든, 다시 git commit을 한다. pre-commit에 의해 파일이 적절히 변환되었을테니 이번엔 passed라고 잘 떠야 한다.
이제 적절히 commit 메세지를 작성하고 저장후 닫아준뒤 원격 저장소에 push해주자. 이제 github으로 가서 pull request로 main에 merge해주면 완료된다.
이제 로컬에서 main으로 checkout 한 뒤 git pull을 하여 최신 상태로 업데이트 해주고, 깃헙 디폴트 브랜치도 develop으로 변경해주면 당장 해줄 일들은 끝난 것 같다.
4. 결어
깃헙 세팅을 혼자서 무사히 마무리 하였다. 몇 달전의 나와 비교하면 엄청난 발전을 이룬 셈이다. 사실 깃은 아직도 어려운 부분이 많은데, 개인 프로젝트를 진행하면서 자주 반복하여 사용하다보면 언젠가 능숙하게 사용하고 있지 않을까 기대하고 있다. 어쨌든 이제 프로젝트 시작을 위한 세팅이 완료되었으니, 본격적인 프로젝트를 시작해보기로 한다.