Conventional Commits

2023. 10. 4. 14:20개발 환경/Git

🔗 공식 문서 : https://www.conventionalcommits.org/ko/v1.0.0/

 

conventional commits 작성을 위한 commit message 구조와 구성요소는 아래와 같다.

 

구조

<header>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
<타입>[적용 범위(선택 사항)]: <설명>

[본문(선택 사항)]

[꼬리말(선택 사항)]

 

 

구성요소

[머리말(Commit Message Header)]

<type>(<optional scope>): <short summary>

 

<타입(type)>

build: 시스템 또는 외부 종속성에 영향을 미치는 변경사항 (npm, gulp, yarn 레벨)
ci: ci 구성파일 및 스크립트 변경
chore: 패키지 매니저 설정할 경우, 코드 수정 없이 설정을 변경
docs: documentation 변경
feat: 새로운 기능
fix: 버그 수정
perf: 성능 개선
refactor: 버그를 수정하거나 기능을 추가하지 않는 코드 변경, 리팩토링
style: 코드 의미에 영향을 주지 않는 변경사항 (white space, formatting, colons)
test: 누락된 테스트 추가 또는 기존 테스트 수정
revert: 작업 되돌리기

 

<설명(short summary)>

변경에 대한 간결한 설명

  • 명령형, 현재 시제 사용
  • 첫글자를 대문자로 사용하지 않음
  • 끝에 마침표(.) 사용하지 않음

 

[본문(Commit Message Body)]

  • header 다음에 한 줄 띄우고 시작해야 한다.
  • 자유 형식이며 개행으로 구분된 단락으로 구성할 수 있음.
  • summary와 마찬가지로 명령형, 현재 시제 사용
  • 변경 동기 설명. 왜 변경하는지를 설명. 변경의 영향을 설명하기 위해 이전 동작과 새로운 동작의 비교를 포함할 수 있음.

 

[꼬리말(Commit Message Footer)]

  • body 다음에 한 줄 띄우고 시작해야 한다.
  • 하위호환성이 없는 변경의 경우 footer에 명시한다면 BREAKING CHANGE (전체 대문자) 그 다음 콜론(:) 과 공백이 오고 설명을 기술해야 한다.
    ex) BREAKING CHANGE: 설명
  • Jira Issue ID나 참조할 다른 MR ID를 입력할 수 있다.

 

 

규칙 (rules)

  • 모든 commit message는 <타입> [적용 범위(선택 사항)]: <설명>을 포함해야 한다.
  • <설명>은 타입쪽에 위치한 콜론 뒤에 한 개의 공백을 유지하고 작성되어야 한다.
    ex) <타입> [적용 범위(선택 사항)]: 여기부터 설명 작성 가능
  • 본문(선택 사항)을 작성할 경우에는 <설명> 사이에 빈 행으로 구분되어야 한다.
  • 본문은 코드 변경의 의도를 포함, 수정 내역을 간단하게 볼 수 있어야 한다.
  • 꼬리말(선택 사항)을 작성할 경우에는 <본문> 사이에 빈 행으로 구분되어야 한다.
  • 프로그램의 단절적 변경(breaking change)이 있을 경우 <타입> 뒤에 !로 표시하거나 꼬리말에 설명이 있어야 한다.
  • 단절적 변경에 대해 꼬리말로 설명할 경우, 대문자 문자열 BREAKING CHANGE과 뒤따르는 콜론(:), 공백, 그리고 설명으로 구성되어야 한다.
    ex) BREAKING CHANGE: config 파일의 `extends` 키는 이제 다른 config 파일의 확장에 사용됨
  • conventional commit을 구성하는 정보의 단위는 반드시 대문자여야 하는 BREAKING CHANGE를 제외하고 구현자에 의해 대소문자를 구분하는 것으로 처리되어서는 안된다.

 

type/scope 뒤에 !를 붙이거나 footer 영역에 BREAKING CHANGE라고 입력하면 breaking API chagne가 있다는 것을 의미 (semantic version에서 MAJOR와 관련)

 

feat, fix 외 type들은 Conventional Commits 규격에 의해 정의되지 않았고, Semantic Versioning에도 영향을 주지 않음. (BREAKING CHANGE를 사용한 경우 예외)

 

scope는 괄호 안에 입력하며, commit의 타입이나 추가적인 정보를 제공하기 위한 목적으로 사용될 수 있음.
ex) feat(core): arary parse 기능 추가

 

콜론(:)과 공백은 필수적으로 있어야 한다.

 

 

예시

feat: 제공된 config 개체가 다른 config를 확장할 수 있도록 허용
fix!: Node 6에 대한 지원 중단

BREAKING CHANGE: Node 6에서 사용할 수 없는 JavaScript 기능을 사용합니다.

Revert에서 맨앞에 R을 대문자로 쓰면 안됐다. 😵

 

 

장점

  • Change Log를 자동으로 생성할 수 있다.
  • 프로젝트를 보는 사람이 변화를 쉽게 이해할 수 있다.
  • 빌드와 배포에 도움이 된다.

 

 


Reference