기본 컨벤션
.github/.gitmessage.txt
################
# <타입>: <제목> (#이슈 번호) 의 형식으로 제목 작성
# 변경 사항이 "무엇"인지 명확히 작성 / 끝에 마침표 금지
# 예) feat: 마이페이지에 개인정보 수정 버튼 추가 (#15)
################
# 본문은 "어떻게" 보다 "무엇을", "왜"를 설명
# 여러 줄의 메시지를 작성할 땐 "-"로 구분
################
# feat : 기능 (새로운 기능)
# fix : 기능 수정 (기존 기능 개선, 사용성 향상을 위한 수정)
# bug : 버그 수정 (오작동하는 기능 수정, 에러 해결 등)
# refactor : 리팩토링 (기능은 같지만 코드를 개선)
# design : UI/UX 변경 (CSS, 사용자 인터페이스 디자인 수정)
# style : 코드 포맷팅, 세미콜론 누락 등 코드 변경이 없는 경우
# docs : 문서 수정 (문서 추가, 수정, 삭제, README)
# test : 테스트 (테스트 코드 추가, 수정, 삭제: 비즈니스 로직에 변경 없음)
# settings : 프로젝트 세팅 관련
# chore : 패키지 매니저 수정, 그 외 기타 수정 ex) .gitignore
# init : 초기 생성
# rename : 파일 혹은 폴더명을 수정하거나 옮기는 작업만 한 경우
# remove : 파일을 삭제하는 작업만 수행한 경우
# build : 빌드 관련 변경 사항
# perf : 성능 개선
# deploy : 배포 관련
################
txt
이모지 컨벤션
.github/.gitmessage.txt
################
# <타입> <제목> (#이슈 번호) 의 형식으로 제목 작성
# 변경 사항이 "무엇"인지 명확히 작성 / 끝에 마침표 금지
# 예) ✨ 마이페이지에 개인정보 수정 버튼 추가 (#15)
################
# 본문은 "어떻게" 보다 "무엇을", "왜"를 설명
# 여러 줄의 메시지를 작성할 땐 "-"로 구분
################
# ✨ feat : 기능 (새로운 기능)
# 🔨 fix : 기능 수정 (기존 기능 개선, 사용성 향상을 위한 수정)
# 🐛 bug : 버그 수정 (오작동하는 기능 수정, 에러 해결 등)
# ♻️ refactor : 리팩토링 (기능은 같지만 코드를 개선)
# 🎨 design : UI/UX 변경 (CSS, 사용자 인터페이스 디자인 수정)
# 📏 style : 코드 포맷팅, 세미콜론 누락 등 코드 변경이 없는 경우
# 📝 docs : 문서 수정 (문서 추가, 수정, 삭제, README)
# ✅ test : 테스트 (테스트 코드 추가, 수정, 삭제: 비즈니스 로직에 변경 없음)
# ⚙️ settings : 프로젝트 세팅 관련
# 🧹 chore : 패키지 매니저 수정, 그 외 기타 수정 ex) .gitignore
# 🎉 init : 초기 생성
# 🚚 rename : 파일 혹은 폴더명을 수정하거나 옮기는 작업만 한 경우
# 🔥 remove : 파일을 삭제하는 작업만 수행한 경우
# 📦 build : 빌드 관련 변경 사항
# ⚡️ perf : 성능 개선
# 🚀 deploy : 배포 관련
################
txt
템플릿 적용 방법
- 커밋 컨벤션을
.gitmessage.txt
(파일명은 원하는대로 수정 가능) 파일로 저장하고 git config로 설정 .gitmessage.txt
파일이 있는 경로에서 아래 명령 실행
프로젝트 단위로 템플릿 설정
git config commit.template .gitmessage.txt
설정 확인
git config --get commit.template
전역에 템플릿 설정
- 경로를
.gitmessage.txt
파일이 있는 절대경로로 작성
git config --global commit.template /Users/(경로에 맞게 수정)/.gitmessage.txt
설정 확인
git config --global --get commit.template
CommitLint 설정
- 커밋 메시지가 규칙에 맞는지 검사하는 도구
- Lefthook이나 Husky 등의 패키지와 함께 사용하면 편리함
기본 컨벤션
commitlint.config.js
export default {
extends: ['@commitlint/config-conventional'],
rules: {
'type-enum': [
2,
'always',
[
'feat',
'fix',
'bug',
'refactor',
'design',
'style',
'docs',
'test',
'settings',
'chore',
'init',
'rename',
'remove',
'build',
'perf',
'deploy',
],
],
'subject-empty': [2, 'never'],
'type-case': [2, 'always', 'lower'],
'type-empty': [2, 'never'],
'subject-case': [0],
'references-empty': [2, 'never'],
},
parserPreset: {
parserOpts: {
headerPattern: /^(\w*): (.+) \(#\d+\)$/,
headerCorrespondence: ['type', 'subject', 'references'],
},
},
}
js
이모지 컨벤션
commitlint.config.js
export default {
extends: ['@commitlint/config-conventional'],
rules: {
'type-enum': [
2,
'always',
[
'✨',
'🔨',
'🐛',
'♻️',
'🎨',
'📏',
'📝',
'✅',
'⚙️',
'🧹',
'🎉',
'🚚',
'🔥',
'📦',
'⚡️',
'🚀',
],
],
'subject-empty': [2, 'never'],
'type-empty': [2, 'never'],
'subject-case': [0],
'references-empty': [2, 'never'],
},
parserPreset: {
parserOpts: {
headerPattern: /^([\u{1F300}-\u{1F9FF}|[\u{2600}-\u{26FF}])\s+(.+?)(?:\s+\(#\d+\))?$/u,
headerCorrespondence: ['type', 'subject', 'references'],
},
},
}
js
옵션
2는 error, 1은 warning, 0은 disable을 의미
type-enum
: 커밋 타입 제한'subject-empty': [2, 'never']
: 제목 필수'type-case': [2, 'always', 'lower']
: 타입은 소문자만'type-empty': [2, 'never']
: 타입 필수'subject-case': [0]
: 제목 케이스 스타일 제한 없음'references-empty': [2, 'never']
: 이슈 번호 필수