개발 - 고급/convention

Git commit 컨벤션 및 템플릿

wooweee 2023. 10. 31. 02:55
728x90

1. Git Commit 컨벤션

  • 커밋 메시지는 제목, 본문, 꼬리말 3가지 파트로 나뉘고 각 파트는 빈줄을 두어서 구분
# git commit

type(옵션): ["해시태그"issueNumber -] Subject # -> 제목 : 최대 50글자, 마침표 X, 영문 표기시 동사원형, 첫char 대문자

body(옵션) #  -> 본문 : 어떻게 X, 무엇을 왜 O , 75자 남기지 말 것

footer(옵션) # -> 꼬리말 : issue tracker ID를 명시하고 싶은 경우 작성


# 예시
Feat: "추가 로그인 함수"

로그인 API 개발

Resolves: #123
Ref: #456
Related to: #48, #45

 

1.1. 제목

    1.1.1. 타입

  • 태그와 제목으로 구성, 태그는 영어로 쓰되 첫문자는 대문자로 작성, : 뒤에만 space 존재 ex) Feat: Subject
  • 참고로 추가적 문맥 정보 제공을 위해 괄호내에 상세 내용 작성 ex) Feat(Navigation)

  • 종류
태그 이름 설명
Feat 새로운 기능 추가
Fix 버그를 고친 경우
Design CSS 등 사용자 UI 디자인 변경
!BREAKING CHANGE 커다란 API 변경의 경우 (arguments || return 값 || db table 변경)
!HOTFIX 급하게 치명적인 버그를 고쳐야하는 경우
Style 코드 포맷 변경, 세미 콜론 누락, 코드 수정 없는 경우
Refactor 프로덕션 코드 리팩토링
Comment 필요한 주석 추가 및 변경
Docs 문서를 수정한 경우 (README.md)
Test 테스트 추가, 테스트 리팩토링(프로덕션 코드 변경 X)
Chore 빌드 테스트 업데이트, 패키지 매니저를 설정하는 경우(프로덕션 코드 변경 X)
Rename 파일 혹은 폴더명을 수정하거나 옮기는 작업만 한 경우
Remove 파일을 삭제하는 작업만 수행한 경우

 

  • 사용
    • 기능 : Feat, Fix, Design, !BREAKING CHANGE, !HOTFIX
    • 개선 : Style, Refactor, Comment
    • 그외 : Docs, Test, Chore, Rename, Remove

 

    1.1.2. 제목

  • 제목의 처음은 동사원형
  • 총 글자 수 50자 이내
  • 특수문자 삽입 하지 않는다 (. ! ?)
  • 개조식 구문 작성
    • 영어 : Fix, Add, Change 명령어로 시작 ex) Feat : "Add get data api 함수"  -  영어 첫글자는 대문자
    • 한글 : 고침, 추가, 변경       명령어로 시작 ex) Feat : "추가 get data api 함수"

 

1.2. 본문

  • 한 줄 당 72자 내로 작성
  • 본문 내용은 양에 구애받지 않고 최대한 상세히 작성
  • 무엇을 변경했는지, 변경했는지 설명 > 어떻게 변경했는지

1.3. 꼬리말

  • 꼬리말은 optional = 선택이다.
  • 이슈 트래커 ID 작성
  • "유형: #이슈 번호" 형식
  • 여러개 이슈 번호 작성 시 쉼표로 구분

  • 이슈 트래커 유형
    • Fixes: 이슈 수정중(미해결)
    • Resolves: 이슈를 해결했을 때 사용
    • Ref: 참고할 이슈가 있을 때
    • Related to: 해당 커밋에 관련된 이슈번호(미해결)
  • ex) Fixes: #45 Realated to: #34, #23

 

2. Gitmoji

  • type으로 사용되는 단어를 이모지로 대체한 것
  • 차이점은 이모지 작성 다음 콜론 없이 바로 제목 작성
  • CLI, GUI version 2가지 존재
  • push 했을 경우 github에서 이모지로 나타난다.

 

2.1. CLI

    2.1.1. 설치

  • npm || brew를 사용해 설치 가능
# 설치
npm i -g gitmoji-cli

brew install gitmoji

# 도움말
gitmoji --help

 

    2.1.2. commit 방법

2.1.2.1. 자동 완성 방법

git add .

gitmoji -c # git commit 과 동일

# 이모지 선택 : 커서로 이동 혹은 :이모지명 작성
# 자동으로 제목, 내용 작성 해라고 보여줌

 

2.1.2.2. 직접 작성 방법

git add.

git commit -m ":이모지명: Add README.md"

 

 

gitmoji

:truck: Move or rename resources (e.g.: files, paths, routes).

gitmoji.dev

 

  • 태그와 유사한 Gitmoji 
아이콘 코드 유사 태그 설명
:sparkles: Feat 새로운 기능 추가
🐛  :bug:  Fix 버그를 고친 경우
🩹 :adhesive_bandage: Fix 심각하지 않은 문제에 대한 간단한 수정
💄 :lipstick: Design CSS 등 사용자 UI 디자인 변경
💥 :boom: !BREAKING CHANGE 주요 변경사항 소개
🚑️ :ambulance: !HOTFIX 긴급 수정
🎨 :art: Style 코드의 구조/형태 개선
♻️ :recycle: Refactor 프로덕션 코드 리팩토링
💡 :bulb: Comment 필요한 주석 추가 및 변경
📝 :memo: Docs 문서 추가/수정
:white_check_mark: Test 테스트 추가/수정
👷  :arrow_up: Chore CI 빌드 스스템을 추가하거나 업데이트
💚 :green_heart: Chore CI 빌드 수정
🚚 :package: Rename 파일 혹은 폴더명을 수정하거나 옮기는 작업만 한 경우
🔥 :fire: Remove 코드/파일 삭제
  • 자주 사용할 법한 Gitmoji (업데이트 중)
더보기
아이콘 코드 설명
🎉 :tada: 프로젝트 시작
⚡️ :za: 성능 개선
🔒 :lock: 보안 이슈 수정
🔐 :closed_lock_with_key: 비밀 추가, 업데이트
🔖 :bookmark: 릴리즈/버전 태그
📌 :pushpin: 특정 버전 의존성 고정
👷 :construction_worker: CI 빌드 시스템 추가/수정
📈 :chart_with_upwards_trend: 분석, 추적 코드 추가/수정
:heavy_plus_sign: 의존성 추가
:heavy_minus_sign: 의존성 제거
🔧 :wrench: 구성 파일 추가/삭제
🔨 :hammer: 개발 스크립트 추가/수정
🌐 :globe_with_meridians: 국제화/현지화
💩 :poop: 똥싼 코드
:rewind: 변경 내용 되돌리기
🔀 :twisted_rightwards_arrows: 브랜치 합병
📦 :package: 컴파일된 파일 추가/수정
👽 :alien: 외부 API 변화로 인한 수정
📄 :page_facing_up: 라이센스 추가/수정
🍻 :beers: 술 취해서 쓴 코드
🗃 :card_file_box: 데이버베이스 관련 수정
🔊 :loud_sound: 로그 추가/수정
🔇 :mute: 로그 제거
🙈 :see_no_evil: .gitignore 추가/수정
🚀 :rocket: 배포
🚨 :rotating_light: 컴파일러/린터 경고 수정
🚧 :construction: 진행중인 작업
⬇️ :arrow_down: 의존성 다운 그레이드
⬆️ :arrow_up: 의존성 업그레이드
📌 :pushpin: 특정 버전 종속성 고정
📈 :chart_with_upwards_trend: 분석, 추적 코드 추가 업데이트
✏️ :pencil2: 오타 수정
💬 :speech_balloon: 텍스트, 리터럴 추가 업데이트
🍱 :bento: 자산 추가 업데이트
♿️ :wheelchair: 접근성 향성
👥 :busts_in_silhouette:  

2.2. GUI

  • 인텔리제이 기준 설명 - vscode도 존재
  • 설치 : plugin에서 gitmoji 설치 (노란 상자에 얼굴 그려진 것)
  • 사용 : 좌측 배너 coomit click하면 gitmoji 얼굴 나타남. 클릭해서 사용 (단축키 com + opt + g)

 

 

3. git template

3.1. Git Config

  • --system
    • Git은 먼저 /etc/gitconfig 파일을 찾는다. 
    • 이 파일은 해당 시스템에 있는 모든 사용자와 모든 저장소에 적용되는 설정 파일이다.
    • git config 명령에 --system 옵션을 주면 이 파일을 사용한다.
  • --global
    • Git은 ~/.gitconfig 파일을 찾는다.
    • 이 파일은 해당 사용자에게만 적용되는 설정 파일이다.
    • --global 옵션을 주면 Git은 이 파일을 사용한다.
  • --local
    • 현재 작업 중인 저장소의 Git 디렉토리에 있는 .git/config 파일을 찾는다.
    • 이 파일은 해당 저장소에만 적용된다.
    • git config 명령에 --local 옵션을 적용한 것과 같다. (아무런 범위 옵션을 지정하지 않으면 Git은 기본적으로 --local 옵션을 적용한다)
  • 각 설정 파일에 중복된 설정이 있으면 설명한 “순서대로” 덮어쓴다.
    예를 들어 .git/config 와 /etc/gitconfig 에 같은 설정이 들어 있다면 .git/config 에 있는 설정을 사용한다.

 

3.2. 커밋 메시지 템플릿 설정

    3.2.1. .gitmessage.txt

  • 생성 위치: .git이 존재하는 아무 곳
  • template 내용
# <타입>: <제목>    형식으로 작성하며 제목은 최대 50글자 정도로만 입력
# <:Gitmogi:> <제목>
# 제목을 아랫줄에 작성, 제목 끝에 마침표 금지, 무엇을 했는지 명확하게 작성

################
# 본문(추가 설명)을 아랫줄에 작성

################
# 꼬릿말(footer)을 아랫줄에 작성 (관련된 이슈 번호 등 추가)

################
# feature : 새로운 기능 추가
# fix : 버그 수정
# docs : 문서 수정
# test : 테스트 코드 추가
# refactor : 코드 리팩토링
# style : 코드 의미에 영향을 주지 않는 변경사항
# chore : 빌드 부분 혹은 패키지 매니저 수정사항
################

3.2. global 적용

  • 해당 프로젝트에 적용
  • vi editer로 동작
    • i : 작성
    • esc : 벗어나기
    • :wq : 저장
# 설정
git config --global commit.template <.gitmessage.txt 경로>
# 제거
git config --global --unset commit.template <.gitmessage.txt 경로>

 

3.3. 참고 블로그