[Git] Commit Message Conventions

✨New Wisdom✨·2020년 11월 26일
5

📚 알쓸코잡 📚

목록 보기
6/8
post-thumbnail

👀우테코 과제 중👀 제시하는 커밋 컨벤션에 맞게 커밋 메세지를 작성해야 한다.
사실 Git을 쓸 때 커밋 메세지의 중요성을 모르고 그냥 아무말이나 막 가져다 썼었는데
최근 졸작이나 해커톤을 참여 경험에서 커밋 메세지의 중요성을 점차 깨달아가고 있었다.

누군가와 협업을 할 때 내가 작성하는 코드는 일단 ❌ 나만 아는 코드 ❌인 것이다.
내가 왜 코드를 이렇게 짰고... 이건 왜 추가한거고 구구절절히 주석으로는 다 남길 수 없다.

여튼 이번 과제를 시작하기에 앞서 프로그래밍 요구사항인 Commit Message Conventions을
좀 자세하게 알아보고 적용하고 싶어서 참고하라는 원문을 좀 정리하고 싶었다.

우테코 덕분에 좀 더 공식적인(?) 커밋 메세지 컨벤션의 정석을 다뤄보게 되었다!
요즘 내 간죽간살 깃프로필 꾸미기 글이 떡상 중이던데, 커밋 메세지도 간죽간살로 써봅시다!

한글로 번역하고 이해한 대로 정리하면서 커밋 메세지 컨벤션을 후다닥 익혀보겠다 ❗️

📃 원문 📃

Format

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

이것이 바로 커밋 메시지의 형식이다.
커밋 메시지의 모든 줄은 100자 이상이 되면 안된다 👉 커밋 메시지 읽기 더 수월해짐!

자 그럼 하나하나 파헤쳐 보자 ⚡️

Subject Line (제목)

커밋 메시지의 제목으로 변경 사항에 대한 간단한 설명이 포함 되어있다.

type

  • feat : 기능
  • fix : 버그 수정
  • docs : 문서 수정
  • style : 서식 지정, 세미콜론 누락 등 코드 변경이 없는 경우
  • refactor : 코드 리팩터링
  • test : 누락된 테스트 코드를 추가할 때
  • chore : 잡일(?), 빌드 업무나 패키지 매니저 수정할 때

scope

어떤 것을 수정했는지 적는다.
ex) $ location, $ browser, $ compile, $ rootScope, ngHref, ngClick, ngView 등

subject

명령형과 현재 시제, 동사 원형을 사용하여 표현한다. (⭕️ : change, ❌ : changed, changes)
첫 글자를 대문자로 쓰지 말라 🚫
끝에 점을 찍지 말라 🚫

Message Body

명령형과 현재 시제, 동사 원형을 사용하여 표현한다. (⭕️ : change, ❌ : changed, changes)
수정을 하게된 이유와 이전과 변경 사항을 기록한다.

Breaking Change (주요 변경 내용)

주요 변경 내용은 이 footer에서 설명한다.
무엇을 고치고, 왜 고쳤는지, migration은 어떻게 해야하는지 설명한다.
원문 예제

BREAKING CHANGE: isolate scope bindings definition has changed and
    the inject option for the directive controller injection was removed.
    
    To migrate the code follow the example below:
    
    Before:
    
    scope: {
      myAttr: 'attribute',
      myBind: 'bind',
      myExpression: 'expression',
      myEval: 'evaluate',
      myAccessor: 'accessor'
    }
    
    After:
    
    scope: {
      myAttr: '@',
      myBind: '@',
      myExpression: '&',
      // myEval - usually not useful, but in cases where the expression is assignable, you can use '='
      myAccessor: '=' // in directive's template change myAccessor() to myAccessor
    }
    
    The removed `inject` wasn't generaly useful for directives so there should be no code using it.

issues

해결한 이슈가 있다면 이 푸터에 작성한다.
"Cloes" 키워드로 시작하여 작성한다.

Closes #123, #245, #992

원문의 최종 Commit Message Convention 예시

fix($compile): couple of unit tests for IE9

Older IEs serialize html uppercased, but IE9 does not...
Would be better to expect case insensitive, unfortunately jasmine does
not allow to user regexps for throw expectations.

Closes #392
Breaks foo.bar api, foo.baz should be used instead
feat($browser): onUrlChange event (popstate/hashchange/polling)

Added new event to $browser:
- forward popstate event if available
- forward hashchange event if popstate not available
- do polling when neither popstate nor hashchange available

Breaks $browser.onHashChange, which was removed (use onUrlChange instead)
style($location): add couple of missing semi colons

Commit Message Convention 사실 거의 처음 써보지만 정리하면서 느낀 것은 누군가와 협업 뿐만이 아니더라도 나 혼자 구현하는 프로그램 또한 Commit Message Convention을 지킨다면 나중에 프로젝트를 볼 때 더 빨리 상기시킬 수 있지 않을까 🐣

profile
🚛 블로그 이사합니다 https://newwisdom.tistory.com/

0개의 댓글