티스토리 뷰

반응형

커밋 메세지 컨벤션(Commit Message Convention)은 무엇이며 왜 필요한가?

 

 Git을 사용해 관리하는 프로젝트가 커지다 보면 로그가 점점 길어지고, reset 혹은 revert를 해야 하는 상황에 원하는 시점을 정확히 찾는 것이 어려워진다. 이러한 상황에 커밋 메세지를 성실하게 작성해 놓았다면 아래와 같이 grep을 사용하여 로그들을 빠르게 찾아볼 수 있다.

git log --grep "(검색어)"

 grep과 다양한 옵션을 추가해 검색을 잘 할 수 있더라도, 결국 커밋 메세지를 잘 적어놓지 않았다면 특정 커밋을 찾기란 매우 어렵다. 이외에도 커밋 메세지를 활용하여 수정 내역을 자동으로 규합하는 등 커밋 메세지의 용도는 다양하다.

 

 특히나 대형 오픈소스 프로젝트에서 이러한 문제들은 매우 중요하게 다뤄지는데, 기여자들의 커밋 메세지가 동일한 원칙에 따라 일관되도록 하기 위해 자신들의 프로젝트에 맞는 커밋 메세지 컨벤션(Commit Message Convention)을 별도로 규정하는 경우가 많다.

 

 이 글에선 AngularJS 의 커밋 메세지 컨벤션에 대해 다룬다. 프로젝트마다 컨벤션은 조금씩 다르나 구조적인 큰 틀은 크게 다르지 않다.

 

원문은 여기


 

커밋 메세지 구조

 

  • 커밋 메세지는 크게 제목, 본문, 꼬리말로 구성되며, 각 구성 요소 사이는 한 줄을 띄운다.
  • 제목의 <type>과 <subject>는 커밋을 대표하는 설명으로 생략하지 않는다.
  • 커밋 메세지의 각 줄은 100자를 넘지 않도록 한다. 깃허브를 비롯한 깃 관리 도구에서 읽기 편하기 위함.
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

 

<type>

 제목의 타입에는 아래의 내용이 들어갈 수 있다.

  • feat (기능 추가)
  • fix (버그 수정)
  • docs (언어에 맞는 문서)
  • style (세미콜론 누락 등의 형식 관련)
  • refactor (리팩터링 시)
  • test (테스트코드 추가)
  • chore (유지 보수)

 

<scope>

 제목 옆의 소괄호에는 변화가 일어난 영역을 적는다.

형식이 명확히 지정된 것은 아니며, 커밋이 변화시키는 부분을 한 단어로 적는다. ex) changelog, release...

 

<subject>

  • <description> 으로 지칭하는 경우도 있으며, 문자열로 커밋의 제목 또는 간략한 설명을 적는다.
  • 현재형, 명령형(imperative) 단어들을 사용한다. (changed: X, changes: X, change: O)
  • 첫 글자를 대문자로 쓰지 않는다.
  • 마지막에 마침표(.)를 적지 않는다.

 

<body>

  • 마찬가지로 현재형, 명령형(imperative) 단어들을 사용한다.
  • 해당 변화를 적용하게 된 동기나, 기존 동작 방식과의 차이를 설명한다.

 

<footer>

  • BREAKING CHANGE (큰 변화가 있을 때 이 키워드와 함께 변화를 자세히 기재)
  • Closes #XXX,  #YYY (XXX와 YYY 버그 관련 이슈를 해결해 이슈를 닫은 경우)

 

 

예시

 

feat(directive): ng:disabled, ng:checked, ng:multiple, ng:readonly, ng:selected

New directives for proper binding these attributes in older browsers (IE).
Added coresponding description, live examples and e2e tests.

Closes #351

 

커밋 메세지에 대한 다른 예시들은 여기에서 확인 가능하다.

 

 

 

왜 현재형, 명령형 단어를 사용하는가?

 

깃 메세지에 현재형, 명령형 단어를 사용하는 이유는 여기에서 설명하고 있다.

 

But, Git is a distributed version control system where there are potentially many places to get changes from. Rather than writing messages that say what you’ve done; consider these messages as the instructions for what applying the commit will do.

 

 언뜻 보면 커밋 메세지는 자기가 한 것을 기록하는 것이니 과거형으로 쓰는 것이 좋을 듯하다. 그러나 깃 의의는 버전 관리에 있으므로 커밋 메세지를 무엇을 했느냐의 기록으로 사용하기보단, 해당 커밋을 적용할 때 어떤 변화가 일어날지 안내하는 도구로 사용함을 권유한다.

 

Renamed the iVars and removed the common prefix. (비추천)
Rename the iVars to remove the common prefix. (추천)

 


 

이외의 참고하면 좋은 사이트

컨벤셔널 커밋

Angular 커밋 메세지 가이드라인

유다시티 깃 커밋 메세지 스타일 가이드

 

 

 

 프로젝트에 따라 커밋 메세지 컨벤션은 상이할 수 있으나 큰 틀은 달라지지 않는다. 자기가 속한 프로젝트 환경에 맞는 컨벤션을 익히자.

반응형

'Git & GitHub' 카테고리의 다른 글

[GitHub] GitHub Discussion 템플릿 적용하기  (0) 2023.06.30