HyunJun 기술 블로그

Git Commit Convention, 깃 커밋 컨벤션 본문

Git

Git Commit Convention, 깃 커밋 컨벤션

공부 좋아 2023. 5. 18. 13:30
728x90
반응형

1. 커밋 컨벤션이란?


형상관리 툴인 Git을 사용하면서 Commit을 할 때 Commit Message를 작성하는 규칙이다.

 

  • 자신 혼자 개발한다면 Commit Message를 아무렇게나 작성해도 자신은 이해할 수도 있겠지만
  • 시간이 오래 지나거나, 10명, 100명처럼 팀원이 늘어난다면?...
  • Commit Message는 Git Repository의 수~~~많은 코드 중 어떠한 기능을 만들었고 무엇을 수정했는지 알 수 있는 유일한 식별자 역할을 하기 때문에 그만큼 커밋 컨벤션 규칙도 중요하다고 할 수 있다.
  • 예를 들어 저번에 JWT 구현했던 코드를 재사용하고 싶다면 과거의 코드를 커밋 메시지로 찾아야 하므로 커밋 메시지의 중요성은 매우 크다고 할 수 있다.

2. 커밋 메시지 구조

커밋 메시지 컨벤션은 정의하기 나름이겠지만, 보통 Udacity Style을 많이 사용한다.

 

type: subject, body, footer로 나뉘고 각 파트는 한 줄의 공백을 두어 구분한다.

type: subject

body

footer

 

 

type subject body(선택 사항) footer(선택 사항)
feat: 새로운 기능 추가 제목은 최대 50글자를 넘기지 않는다.  본문은 한 줄당 72자 내로 작성한다. 이슈 트래커 ID를 작성한다.
fix: 버그 수정 양에 구애받지 않고 최대한 상세히 작성한다. "유형: #이슈 번호" 형식으로 작성한다.
docs: 문서 수정 마침표 및 특수기호는 사용하지 않는다. 어떻게 변경했는지 보다 무엇을 변경했는지 또는 왜 변경했는지를 설명한다.


 
여러 개의 이슈 번호를 적을 때는 쉼표(,)로 구분한다.
style: 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우 Fixes: 이슈 수정 중 (아직 해결되지 않은 경우)
refactor: 코드 리팩토링 Resolves: 이슈를 해결한 경우
test: 테스트 코드, 리팩토링 테스트 코드 추가
영문으로 표기하는 경우 동사 원형을 가장 앞에 두고 첫 글자는 대문자로 표기한다.(과거 시제 사용 금지)
Ref: 참고할 이슈가 있을 경우
chore: 빌드 업무 수정, 패키지 매니저 수정, production code와 무관한 부분들 (.gitignore, build.gradle 같은) Related to: 해당 커밋에 관련된 이슈 번호(아직 해결되지 않은 경우)
comment: 주석 추가 및 변경
remove: 파일, 폴더 삭제 ex) Fixes: #45 Related to: #34, #23
rename: 파일, 폴더명 수정

 

 

subject를 영어로 작성할 경우 아래와 같은 동사원형을 가장 앞에 작성한다.

# Add : 추가
# Remove : 삭제
# Simplify : 단순화
# Update : 보완
# Implement : 구현
# Prevent : 방지
# Move : 이동
# Rename : 이름 변경

 

3. 예시

feat: "로그인 기능 구현"

로그인 시 JWT 발급

Resolves: #111
Ref: #122
related to: #30, #50

 

fix: Update Login Logic

 

 

chore: Update git.ignore

database 관련 중요 정보 변경 감추기 위해 
.gitignore에 application-database.properties 추가

 

4. Git Message Template

 

마지막으로, Commit 할 때 기본적으로 보여질 멘트 Template를 설정할 수 있다.

git이 적용되어 있는 진행 중인 프로젝트 루트 디렉토리에 .gitmessage.txt 파일 생성 후 아래의 예를 보고 커스텀 한다.

# my commit message template
# 본문과 푸터는 선택 사항입니다.
##################
# type: Subject (아래에 작성)

# Body(아래에 작성)

# Footer(아래에 작성)
##################
# feat: 새로운 기능 추가
# fix: 버그 수정
# docs: 문서 수정
# style: 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우
# refactor: 코드 리팩토링
# test: 테스트 코드, 리팩토링 테스트 코드 추가
# chore: 빌드 업무 수정, 패키지 매니저 수정, production code와 무관한 부분들 (.gitignore, build.gradle 같은)
# comment: 주석 추가 및 변경
# remove: 파일, 폴더 삭제
# rename: 파일, 폴더명 수정
##################
# 영어로 Subject 작성 시
# Add : 추가
# Remove : 삭제
# Simplify : 단순화
# Update : 보완
# Implement : 구현
# Prevent : 방지
# Move : 이동
# Rename : 이름 변경
##################
# 예시
# feat: "로그인 기능 구현"

# 로그인 시 JWT 발급

# Resolves: #111
# Ref: #122
# related to: #30, #50

 

진행 중인 프로젝트의 터미널에서 아래와 같이 적용한다.

git config --global commit.template <.gitmessage.txt 경로>

 

 

이제 commit을 하게 되면

 

 

아래와 같이 방금 지정한 템플릿이 나오게 된다.

 

 

이때 i를 누르면 insert 모드로 들어가게 되고 커밋 메시지를 작성해 주면 된다. 

주석 처리(#)된 부분들은 커밋 메시지에 포함되지 않으니 아래 예시처럼 작성해 주면 된다.

(줄이 겹친다던지 버그가 생겼을 때는 esc를 누르면 된다.)

 

 

-- INSERT -- 모드에서 빠져나오려면 esc를 누르면 되고

:wq를 입력하여 저장 및 종료하면 커밋 메시지가 입력된다.

 

 

 

그다음 Push를 하고 Github에서 확인해 보았습니다.

728x90
반응형
Comments