기억보단 기록을/Git

GitHub Conventional Commit Message

_OIL 2023. 5. 17. 22:16
반응형
이 글은 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를 상속(확장)합니다.
  • 설정이 완료되면 형식에 어긋난 형태로 커밋을 작성해 보면 커밋이 거부되는 것을 확인할 수 있습니다.

참조

반응형