깃을 이용한 커밋은 일기장에 적는 일기가 아니기 때문에 일관되게 작성해야
정보를 명확하게 전달할 수 있습니다.
개략적으로 알기 쉽고 다음에 다시 볼때도 효과적입니다.
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