[Convention] Git Commit Message Conventions

Ariul·2022년 11월 5일
0

KEYWORD 뽑아먹기🥢

목록 보기
1/4
post-thumbnail

AngularJS Git Commit Message Conventions를 정리한 포스팅입니다.

커밋 메시지 컨벤션

목표

  • 스크립트로 CHANGELOG.md 생성할 수 있다.
  • git bisect로 중요하지 않은 커밋을 무시할 수 있다.
  • 커밋 히스토리를 볼 때 더 좋은 정보를 제공한다.

1. CHANGELOG.md 생성

  • 변경 내역에는 다음 세 가지 내용이 포함된다.
    1) 새로운 기능

    2) 버그 수정

    3) 주요 변경 사항

  • 관련 커밋에 대한 링크와 함께 배포 시 스크립트로 위 내용들을 생성할 수 있다.
  • 물론 실제 배포 전에 이 변경 내역을 수정할 수 있다.

마지막 배포 이후의 모든 커밋 제목(커밋 메시지 첫 줄) 목록

git log <last tag> HEAD --pretty=format:%s

이번 배포의 새로운 기능 조회

git log <last release> HEAD --grep feature

2. 중요하지 않은 커밋 무시

  • 아래와 같이 로직의 변화가 없는 커밋은 무시할 수 있다
    • 포맷 변화 (공백이나 빈 줄의 추가, 제거, 들여쓰기)
    • 세미 콜론 누락
    • 주석
  • git bisect 명령어를 이용해서 무시한다.
    git bisect skip $(git rev-list --grep irrelevant <good place> HEAD)

3. 커밋 히스토리를 볼 때 더 좋은 정보 제공

  • 일종의 “문맥” 정보를 추가하는 것이 좋다.
  • 어떤 변경이 있었는지는 알 수 있지만 일관된 형식으로 작성하지 않은 경우
    Fix small typo in docs widget (tutorial instructions)
    Fix test for scenario.Application - should remove old iframe
    docs - various doc fixes
    docs - stripping extra new lines
    Replaced double line break with single when text is fetched from Google
    Added support for properties in documentation
  • 어디에 변경이 있는지 알 수 없는 경우
    fix comment stripping
    fixing broken links
    Bit of refactoring
    Check whether links do exist and throw exception
    Fix sitemap include (to work on case sensitive linux)

커밋 메시지 포맷

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

커밋 메시지의 각 줄은 100자를 넘기지 않아야 한다. 그래야 GitHub 등의 도구에서 읽기 쉽다.

Subject line : 헤더

  • 변경 사항에 대한 간결한 설명을 포함한다.
  • Allowed <type>
    feat : 새로운 기능 추가
    fix : 버그 수정
    docs : 문서 관련
    style : 스타일 변경 (포매팅 수정, 누락된 세미 콜론 추가, 들여쓰기 추가,)
    refactor : 코드 리팩토링
    test : 테스트 관련 코드
    chore : 그 외 자잘한 수정 // 새로운 Angular 9 규약에서 삭제
    
    // 새로운 Angular 9 규약에 추가
    build : 빌드 관련 파일 수정
    ci : CI 설정 파일 수정
    perf : 성능 개선
  • Allowed <scope>
    • 어디를 수정했는지 작성한다.
    • ex. $location, $browser, $compile, $rootScope, ngHref, ngClick, ngView 등
  • <subject> text
    • 명령문, 현재 시제로 작성한다.
      • 예를 들어, 변경되었으면 : “change”를 사용한다.
      • “changed”나 “changes”를 사용하지 않는다.
    • 첫 글자를 대문자로 쓰지 않는다. 소문자로 쓴다.
    • 마지막에 마침표(.)를 붙이지 않는다.

Message body : 메세지 내용

  • 명령문, 현재 시제로 작성한다.
  • 변경한 이유와 변경 전과의 차이점을 설명한다.

주요 변경 사항

  • 모든 주요 변경 사항들은 하단에 언급한다.
  • 무엇을 고쳤는지, 왜 고쳤는지, 마이그레이션은 어떻게 해야 하는지 설명한다.
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.

해결된 이슈

  • 해결된 이슈는 커밋 메시지 하단에 Closes #<이슈번호> 와 같이 기록한다.
  • 해결된 이슈가 여러 개인 경우에는 Closes #123, #245, #992 와 같이 기록한다.

예시

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)
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(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
style($location): add couple of missing semi colons
docs(guide): updated fixed docs from Google Docs

Couple of typos fixed:
- indentation
- batchLogbatchLog -> batchLog
- start periodic checking
- missing brace
feat($compile): simplify isolate scope bindings

Changed the isolate scope binding options to:
  - @attr - attribute binding (including interpolation)
  - =model - by-directional model binding
  - &expr - expression execution binding

This change simplifies the terminology as well as
number of choices available to the developer. It
also supports local name aliasing from the parent.

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.

IntelliJ 플러그인 사용하기

profile
정성과 진심을 담아 흔적을 기록하자💡

0개의 댓글