무언가 만들어보기/펭귄맨

펭귄맨 : GitHub 세팅 - part 2

도리언 옐로우 2024. 4. 8. 14:10

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 파일을 만들고 이 파일에 위 사이트에서 생성된 내용을 복붙한다.

.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-commit 설치

 

pre-commmit 적용을 위한 .pre-commit-config.yaml 설정 파일을 만들어야 한다. 다음 명령어를 입력한다.

.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을 등록한다.

autoupdate와 install 진행

 

3. 세팅 마무리

지금까지 로컬에서 작업한 것들을 원격 저장소에 반영시키면서 세팅이 잘 되었는지 확인해보자. 원래는 한 커밋당 이슈 하나를 담는게 바람직하지만, 이번에만 편의상 기초 세팅에 관한 이슈를 하나의 커밋으로 처리하기로 하자. git add. 후 git commit을 하자 무언가 진행되더니 fail이 뜬다. 포맷에 맞지 않은 파일이 있어 이것이 pre-commit에 의해 수정된 것이다.

pre-commit이 잘 동작하고 있다

 

pre-commit에 의해 파일이 수정되었을테니 다시 git add .를 해본다.

무언가 오류가 뜬다

GPT한테 물어보니 Windows와 Linux 시스템 간의 줄바꿈 문자 호환성 문제라면서, 이는 git config --global core.autocrif true 명령어를 입력해서 해결할 수 있다고 한다.

 

어쨌든, 다시 git commit을 한다. pre-commit에 의해 파일이 적절히 변환되었을테니 이번엔 passed라고 잘 떠야 한다.

무사히 passed 된 모습
commit 메세지 편집창도 무사히 잘 뜬다!

 

이제 적절히 commit 메세지를 작성하고 저장후 닫아준뒤 원격 저장소에 push해주자. 이제 github으로 가서 pull request로 main에 merge해주면 완료된다.

아직 PR template이 적용되지 않았으므로 손수 작성해 주자

 

main 브랜치에 잘 반영된 것을 확인할 수 있다

 

이제 로컬에서 main으로 checkout 한 뒤 git pull을 하여 최신 상태로 업데이트 해주고, 깃헙 디폴트 브랜치도 develop으로 변경해주면 당장 해줄 일들은 끝난 것 같다.

깃 그래프 모습

 

4. 결어

깃헙 세팅을 혼자서 무사히 마무리 하였다. 몇 달전의 나와 비교하면 엄청난 발전을 이룬 셈이다. 사실 깃은 아직도 어려운 부분이 많은데, 개인 프로젝트를 진행하면서 자주 반복하여 사용하다보면 언젠가 능숙하게 사용하고 있지 않을까 기대하고 있다. 어쨌든 이제 프로젝트 시작을 위한 세팅이 완료되었으니, 본격적인 프로젝트를 시작해보기로 한다.