AngularJS 커밋 컨벤션 한국어 번역본 입니다.
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)
<type>: 커밋의 종류
feat: 새로운 기능을 추가할 때.fix: 버그 픽스 시.docs: 문서만 변경했을 때.style: 코드 의미 변화 없이 포맷팅 등 수정 시.refactor: 기능 변경 없이 코드 리팩토링 시.test: 누락된 테스트를 추가하거나 기존 테스트 수정 시.chore: 빌드 프로세스, 외부 라이브러리 업데이트 등 유지보수 작업 시.<subject>: 변경의 대한 짧은 설명
이 규칙들은 AngularJS 커밋 규칙에서 가져온 것입니다.
CHANGELOG.md를 자동으로 생성할 수 있도록 함git bisect에서 무시할 수 있도록 함우리는 changelog를 생성할 때 세 가지 섹션 — 새로운 기능(new features), 버그 수정(bug fixes), 주요 변경사항(breaking changes) — 을 사용합니다. 이 목록은 릴리즈 시 스크립트를 통해 자동으로 생성할 수 있습니다. 또한 관련 커밋에 대한 링크도 포함할 수 있습니다. 물론 실제 릴리즈 전에 이 changelog를 직접 편집할 수 있지만, 기본 골격은 자동으로 만들어집니다.
최근 릴리즈 이후의 모든 커밋 제목(첫 줄)을 보려면 다음 명령을 실행합니다:
git log <last tag> HEAD --pretty=format:%s
이번 릴리즈에서 새 기능만 추출하려면:
git log <last release> HEAD --grep feature
중요하지 않은 커밋은 코드 포맷 변경(공백 추가/삭제, 들여쓰기 수정), 세미콜론 누락, 주석 추가 등과 같은 것입니다. 이런 커밋은 논리적인 코드 변경이 없으므로, 변경사항을 추적할 때 무시해도 됩니다.
git bisect 실행 시 이런 커밋을 건너뛰려면 다음 명령을 사용할 수 있습니다:
git bisect skip $(git rev-list --grep irrelevant <good place> HEAD)
이 규칙을 따르면 커밋 메시지에 “맥락(context)” 정보를 추가할 수 있습니다.
예를 들어 다음과 같은 메시지를 봅시다:
이 메시지들은 변경된 위치를 대략적으로 알려주지만, 일관된 규칙이 없습니다.
반대로 이런 메시지들은 어떤 부분이 수정된 건지 알기 어렵습니다:
파일 경로를 보면 알 수 있지만, 이는 느리고 불편합니다. 모두가 커밋 메시지에 변경된 위치를 언급하려 하지만, 표준화된 규칙이 없을 뿐입니다. 이 규칙은 바로 그 문제를 해결합니다.
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
각 줄은 100자 이하로 작성해야 합니다. 이렇게 하면 GitHub이나 다른 Git 도구에서 메시지를 더 쉽게 읽을 수 있습니다.
Subject(제목 줄)는 변경사항에 대한 간결한 설명을 포함합니다.
<type><scope>Scope(영역)는 커밋이 변경된 위치를 나타냅니다.
예: $location, $browser, $compile, $rootScope, ngHref, ngClick, ngView 등
<subject> text참고: http://365git.tumblr.com/post/3308646748/writing-git-commit-messages http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
모든 주요 변경사항(BREAKING CHANGE) 은 푸터에 명시해야 하며, 변경 내용, 이유, 마이그레이션 방법 등을 함께 설명해야 합니다.
예시:
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 #234
여러 개의 이슈를 닫을 경우:
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.