반응형
이 글은 2021년 2월 21일에 작성되었습니다.
Git pull request를 사요면 자연스럽게 모든 팀원들이 한눈에 알아볼 수 있는 Commit의 형태는 무엇일지 고민하게 됩니다. 이번 글에서는 가독성 좋은 Commit의 가이드라인을 공유하고 Commit 템플릿을 어떻게 적용하는지 알아보겠습니다.
기본 Commit 구조
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
type 종류
- feat: 새로운 기능 추가
- fix: 버그 수정
- docs: 문서 수정
- style: 코드 포맷팅
- refactor: 코드 리팩토링
- chore: 빌드 파일 수정, 패키지 파일 수정
- revert: 커밋 되돌리기
description 작성법
- 글의 길이는 50글자를 넘지않습니다.
- 과거 시제를 사용하지 않습니다.
- 문장의 끝에는 마침표를 찍지 않습니다.
body 작성 법
- body는 선택 사항입니다. description 외에 추가적인 정보를 전달할 때 사용합니다.
footer 작성 법
- footer도 선택 사항입니다. 이슈를 추적하거나 다른 커밋을 가리키기 위한 태그로 많이 사용됩니다.
- 추 후 지라 smart commit과 연동하면 작업한 코드의 커밋 추적이 쉬워질 것을 예상합니다.
Git Commit Template 설정하기
1. 공유하기 쉽도록 프로젝트 루트 디렉터리에 git-commit-template.txt 생성 후 아래의 내용을 복사 붙여 넣기 합니다.
<타입>[선택적 영역]: <간단한 설명>
#[분문]
#[풋터]
#
# <>는 필수 입력 []는 상황에 따라 선택적으로 입력하면됩니다.
#
# <타입> 리스트
# feat : 새로운 기능 추가
# fix : 버그 수정
# refactor: 코드 리팩토링
# style : 스타일 (코드 형식, 세미콜론 추가: 비즈니스 로직에 변경 없음)
# docs : 문서 (문서 추가, 수정, 삭제)
# test : 테스트 (테스트 코드 추가, 수정, 삭제: 비즈니스 로직에 변경 없음)
# chore : 기타 변경사항 (빌드 스크립트 수정 등)
# revert : 커밋 되돌기기
# ------------------
# 제목은 최대 50 글자까지만 입력
# 제목 끝에 마침표(.) 금지
# 제목과 본문을 한 줄 띄워 분리하기
# 본문은 "어떻게" 보다 "무엇을", "왜"를 설명한다.
# 본문은 한 줄에 최대 100글자까지 입력
# 본문에 여러줄의 메시지를 작성할 땐 "-"로 구분
# 꼬릿말은 아래에 작성: ex) #이슈 번호
# ------------------
2.git config --global commit.template./git-commit-template.txt 프로젝트 터미널에 해당 명어를 입력하면 git-commit-template.txt이 모든 프로젝트에 적용됩니다. 사용하고 있는 프로젝트에만 템플릿을 적용하고 싶으면 —global을 제거하면 됩니다.
- git commit 입력 시 적용한 템플릿이 콘솔에 표시됩니다.
- #는 자동으로 주석 처리 되므로 git에는 등록되지 않습니다.
- 입력 방법은 i를 누르면 insert 모드가 되고 방향키로 편집 부분으로 이동 후 작성하면 됩니다. 작성이 완료되면 ese 누른 후 : 입력 후 wq 로 저장하면 됩니다.
- 작성 취소는 ese 누른후 : 입력 후 q! 작성내용이 저장되지 않고 편집기가 종료됩니다.
- 본문과 풋터를 작성해야 된다면 #를 지우고 작성하면 됩니다.
- 제목과 본문 사이에 한 칸의 빈 줄을 만들면 git log --oneline 했을 때 제목과 본문이 라인으로 구분되어 제목만 따로 볼 수 있는 것을 확인할 수 있습니다.
Commit 형식 검사 환경 만들기
템플릿은 작성했지만 모든 팀원이 정해진 템플릿대로 작성한다는 것은 보장할 수 없습니다. 그래서 husky로 commit-msg hook을 감지하고 commitlint을 실행해 입력한 commit이 정해진 규칙대로 작성했는지 검사하는 환경을 만들어 보겠습니다.
commitlint에 사용되는 commit conventional은 Angular에서 공식적으로 사용하는@commitlint/config-conventional을 상속해서 사용하는 것을 추천합니다.
- husky와 @commitlint/cli 그리고 @commitlint/config-conventional를 설치합니다.
yarn add husky @commitlint/cli @commitlint/config-conventional -D
- package.json에 husky와 commitlint를 설정합니다. (분홍색으로 칠해진 부분입니다.)
{
"name": "pushnews-for-pg",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
},,
"devDependencies": {
"@commitlint/cli": "^11.0.0",
"@commitlint/config-conventional": "^11.0.0",
"husky": "^4.3.7"
},
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"commitlint": {
"extends": [
"@commitlint/config-conventional"
]
}
}
- husky: commit-msg라는 git hook이 실행되면 commitlint를 실행합니다.
- commitlint: commitlint에서 제공하는 commitlint/config-conventional를 상속(확장)합니다.
- 설정이 완료되면 형식에 어긋난 형태로 커밋을 작성해 보면 커밋이 거부되는 것을 확인할 수 있습니다.
참조
반응형
'기억보단 기록을 > Git' 카테고리의 다른 글
현재 필요한 코드 관리 Flow는 무엇일까? (0) | 2023.05.09 |
---|