GIT & GITHUB

commit convention 총정리 및 중요한 이유

S_N_Y 2024. 2. 10. 23:17

#1. commit convention, 중요한가?

혼자 개발한다면 commit message를 아무렇게나 작성해도 자신은 이해할 수 있지만 시간이 오래 지나거나 같이 보는 팀원이 생긴다면 보기 어려울 수가 있다.

스스로에게도 convention을 지켰을 때 가장 좋은 점이 전에 작성해놨던 구현 코드들을 다시 사용하고 싶을 때 정릴르 제대로 해놓으면 쉽게 찾아 쓸 수 있기 때문에 굉장히 중요한 부분이다.

 

#2. 커밋메세지 구조 알아보기

커밋 메세지 구조는 크게 3가지로 나뉜다 => (제목, 본문, 꼬리말)

type: subject -> 제목
(한칸 띄워야 한다)
body -> 본문
(한칸 띄워야 한다)
footer -> 꼬리말

1) type

feat : 새로운 기능을 추가할 때

fix : 버그 수정했을 때

refactor : 리팩토링했을 때

design : 사용자 UI 디자인 변경됐을 때 (css 등)

comment : 필요한 주석 추가 혹은 변경되었을 때

style : 코드 포맷팅, 세미콜론 누락되거나 코드 변경이 없는 경우

test : 테스트 코드 추가/수정/삭제, 비즈니스 로직에 변경이 없는 경우

init : 프로젝트 초기 생성했을 때

rename : 파일/폴더명을 수정했거나 옮겼을 경우

remove : 파일을 삭제하는 작업만 수행했을 경우

chore : 위에 나열한 것중에 걸리지 않는 기타 변경사항이 발생했을 경우

 

2) subject

- 제목은 최대 50글자 이상 넘어가지 말기

- 마침표나 특수기호는 사용하지 말기

- 첫 글자는 대문자 혹은 명령어로 사용하기 - 과거시제 사용X (예 :  "Fixed" => "Fix")

- 개조식 구문으로 작성하기(간결하고 요점적으로)

3) body

이 부분은 선택사항이기 때문에 모든 커밋부분에 본문내용을 작성할 필요는 없다. 부연설명이 필요하거나 이유를 설명해야할 경우 작성해주는 부분이다.

<body rule>

- 한 줄당 72자 내로 작성하기

- 최대한 상세히 작성하기

- '무엇을', '왜' 변경했는지에 대해 작성하기

4) footer

이 부분도 선택사항이고 모든 커밋에 꼬리말을 작성할 필요는 없다. issue tracker ID 를 작성할 때 사용한다.

<footer rule>

- 유형 : #이슈 번호 형식으로 작성하기

- issue tracker ID를 작성하기

- 여러 개의 이슈 번호는 ,로 구분하기

 

* issue tracker 유형

Fixes : (아직 해결되지 않은 경우) 이슈 수정중일 때 사용

Resolves : 이슈를 해결했을 때 사용

Ref : 참조할 이슈가 있을 때 사용

Related to : (아직 해결되지 않은 경우) 해당 커밋에 관련된 이슈 번호

참고) 

footer에 Fixes: : #1이라고 작성하고 커밋하면 자동으로 issue #1과 매칭

여기에다 Resolves : #1으로 이슈를 해결했다 명시하면 그 이슈는 사라지게 만들었다..!

 

#3 쓰기 좋은 커밋 템플릿과 적용방법

# 제목은 최대 50글자까지 아래에 작성: ex) Feat: Add Key mapping  

# 본문은 아래에 작성  

# 꼬릿말은 아래에 작성: ex) Github issue #23  

# --- COMMIT END ---  
#   <타입> 리스트  
#   feat        : 기능 (새로운 기능)  
#   fix         : 버그 (버그 수정)  
#   refactor    : 리팩토링  
#   design      : CSS 등 사용자 UI 디자인 변경  
#   comment     : 필요한 주석 추가 및 변경  
#   style       : 스타일 (코드 형식, 세미콜론 추가: 비즈니스 로직에 변경 없음)  
#   docs        : 문서 수정 (문서 추가, 수정, 삭제, README)  
#   test        : 테스트 (테스트 코드 추가, 수정, 삭제: 비즈니스 로직에 변경 없음)  
#   chore       : 기타 변경사항 (빌드 스크립트 수정, assets, 패키지 매니저 등)  
#   init        : 초기 생성  
#   rename      : 파일 혹은 폴더명을 수정하거나 옮기는 작업만 한 경우  
#   remove      : 파일을 삭제하는 작업만 수행한 경우  
# ------------------  
#   제목 첫 글자를 대문자로  
#   제목은 명령문으로  
#   제목 끝에 마침표(.) 금지  
#   제목과 본문을 한 줄 띄워 분리하기  
#   본문은 "어떻게" 보다 "무엇을", "왜"를 설명한다.  
#   본문에 여러줄의 메시지를 작성할 땐 "-"로 구분  
# ------------------  
#   <꼬리말>  
#   필수가 아닌 optioanl  
#   Fixes        :이슈 수정중 (아직 해결되지 않은 경우)  
#   Resolves     : 이슈 해결했을 때 사용  
#   Ref          : 참고할 이슈가 있을 때 사용  
#   Related to   : 해당 커밋에 관련된 이슈번호 (아직 해결되지 않은 경우)  
#   ex) Fixes: #47 Related to: #32, #21

적용방법 :

1. 자기가 원하는 경로에 gitmessage.txt 파일을 생성한다

2. 내용은 위 템플릿을 사용하여 내용 삽입한다(#는 참고로 주석이다)

3. 터미널에 명령어를 입력한다

$ git config --global commit.template C:\.gitmessage.txt (예시로 C:/를 준 상태이고 실제로는 본인 결로에다가 적기)

 

이 설정을 통해 앞으로 $ git commit 명령어를 통해 앞전에 만들어뒀던 vim 메세지가 보일 것이다. 본인만의 템플릿으로 커스텀해서 간편하게 커밋할 수 있다

 

나의 생각 :

커밋 컨벤션을 정리해보니 협업할 때 남과 내가 알기 쉽게 정리하는 것이 얼마나 도움되는 행동인지 찾아보며 깨닫게 되었다. 이 뿐만 아니라 여러 컨벤션을 잘 숙지하고 적용해보고 나아가야 한다.