본문 바로가기

프로그래밍 공부내용

[Git] 커밋 메시지 규약 독해 정리하기(the AngularJS commit conventions)

 

깃을 이용한 커밋은 일기장에 적는 일기가 아니기 때문에 일관되게 작성해야

 

정보를 명확하게 전달할 수 있습니다.

 

개략적으로 알기 쉽고 다음에 다시 볼때도 효과적입니다.

 

The Angular JS Commit Convention 을 읽고 나름대로 정리 해 보도록 하겠습니다.

 

 

 

1. 포맷

예시로 이해하는게 가장 쉽기 때문에 포맷부터 뜯어보는 게 개인적으로 편했습니다.

 

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

 

포맷은 이런 형태로 이루어집니다.

가독성을 위해 각 줄은 100글자를 넘지 않도록 한다.

 

1-1. type 

- feat(feature) : 새로운 기능 개발

- fix(bug fix) : 버그 수정

- docs(documentation) : 문서 작성 및 수정

- style(formatting, missing semi colons, ...) : 포매팅, 세미콜론 누락등 코드변경은 없는 수정

- refactor : 리팩토링

- test(when adding missing tests) : 테스트 추가

- chore(maintain) : 빌드환경, 업무환경등 수정했을 시

 

1-2. Subject

변화에 대한 설명을 '간결'하게 적는다.

명령법으로 쓰고 현재형으로 쓸 것 (ex. change(o), changed(x), changes(x))

첫 글자를 대문자로 하지 말 것.

끝에 온점(.) 찍지 않을 것

 

1-3 Scope

어디서 변화가 났는지에 대한 힌트를 주는 곳

ex) $location, $browser, $compile, $rootScope etc...

 

 

1-4 Message Body

명령법으로 쓰고 현재형으로 쓸 것

변화에 대한 동기나, 이전 버젼과의 차이점 위주로 기술할 것

 

바닥글에 아래의 내용들 들어감

-Breaking changes

-Referencing issues

 

 

 

2. CHANGELOG.md 생성

changelog에서 세가지 섹션(새로운 기능, 버그 수정, 주요 변경사항) 을 사용해서

커밋에 대해서 살펴볼 수 있음.

 

 

- 마지막 릴리즈 이후 모든 제목(커밋 메세지의 첫 줄) 리스트 보기

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

 

- 새 릴리즈에서 새 기능 보기

 

git log <last release> HEAD --grep feature

 

- 안 중요한 커밋 메세지 내용 걸러내기

형식변경, 세미콜론 누락, 주석 등을 제거하고 변경점을 찾을 수 있다.

git bisect skip $(git rev-list --grep irrelevant <good place> HEAD)

 

 

 

 

3. 결론

여태까지 깃 커밋을 할때 어디선가 본 커밋 규약을 이용해서

 

맨 첫줄에 type 을 넣고 몇가지 나만의 카테고리안에서 골라 작성해왔었고,

 

나름대로 깔끔하게 정리했다고 생각하고 있었다.

 

프리코스를 하게 돼 AngularJs git commit를 참조해 작성하라는 임무를 받아 많이 알려진 방식으로 내용을 다시 조립할 

 

필요가 생겼다.(역시 마감이나 과제가 있어야 힘이 나는 사람...)

 

앞으로 프로젝트를 할때는 더 체계적으로 관리하고 많이 쓰이는 방법을 쓸 필요가 있을 것 같아 기왕하는김에 정독했다.

 

영문 1page짜리 문서가 이렇게 안 읽힐줄은 몰랐지만 생각보다 금방 읽었다. (논문은 어떻게 읽어왔던건지..)

 

예시가 필요하면 아래 링크로 들어가면 원문에 첨부된 많은 예시를 볼 수 있다.

 

 

 

 

예제)

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)

참고 : https://gist.github.com/stephenparish/9941e89d80e2bc58a153#format-of-the-commit-message