為什麼需要規範團隊開發時候,規範可以團隊的產出更多的去個性化,向團隊化. 除了常見的程式碼規範,commit message規範也必不可少統一的commit message也是除了程式碼註釋之外,其他對變更的說明,便於後續維護,提高團隊效能規範的commit message 可以很方便地提煉出更新日誌AngularJS提交規範
AngularJS提交規範 逐漸被大家認可,也成為了通用的提交規範. 所以本文主要使用的規範物件統一指 AngularJS提交規範
他可以透過可以透過工具 commitizen 進行一些模板和
AngularJS 在 github上 的提交記錄被業內許多人認可,逐漸被大家引用。
規範詳情每次提交,Commit message 都包括三個部分:Header(line 1),Body 和 Footer
<type>(<scope>): <subject> <BLANK LINE> <body> <BLANK LINE> <footer>
Header
Header 部分只有一行,包含三個部分 type (必須), scope(選填)和subject(必填)
(1) type用於說明commit的類別,只允許使用以下標識
主要type feat: 增加新功能 fix: 修復bug特殊type docs: 只改動了文件相關的內容 style: 不影響程式碼含義的改動,例如去掉空格、改變縮排、增刪分號 build: 構造工具的或者外部依賴的改動,例如webpack,npm refactor: 程式碼重構時使用 revert: 執行git revert列印的message暫不使用type test: 新增測試或者修改現有測試 perf: 提高效能的改動 ci: 與CI(持續整合服務)有關的改動 chore: 不修改src或者test的其餘修改,例如構建過程或輔助工具的變動如果type為feat和fix,則該 commit 將肯定出現在 Change log 之中。其他情況(docs、chore、style、refactor、test)由你決定,要不要放入 Change log,建議是不要。
(2) scopescope用於說明 commit 影響的範圍,比如資料層、控制層、檢視層等等,視專案不同而不同。
(3) subjectsubject是 commit 目的的簡短描述,不超過50個字元。
以動詞開頭,使用第一人稱現在時,比如change,而不是changed或者changes第一個字母小寫-漢語忽略結尾不加句號(.)
BodyBody 部分是對本次 commit 的詳細描述,可以分成多行。下面是一個範例。
More detailed explanatory text, if necessary. Wrap it to brabout 72 characters or so. Further paragraphs come after blank lines. Bullet points are okay, toobr- Use a hanging indent
有兩個注意點。
(1)使用第一人稱現在時,比如使用change而不是changed或changes。
(2)應該說明程式碼變動的動機,以及與以前行為的對比。
FooterFooter 部分只用於兩種情況。
(1)不相容變動
如果當前程式碼與上一個版本不相容,則 Footer 部分以BREAKING CHANGE開頭,後面是對變動的描述、以及變動理由和遷移方法。
BREAKING CHANGE: isolate scope bindings definition has changed.br br To migrate the code follow the example below:br br Before:br br scope: {br myAttr: 'attribute',br }brbr After:br br scope: {br myAttr: '@',br }br br The removed `inject` wasn't generaly useful for directives so there should be no code using it.
(2)關閉 Issue
如果當前 commit 針對某個或者多個issue
github上可以直接關聯PR和ISSUE ,gitlab可以和 JIRA配合,具體見 GitLab Jira integration
Close #123
OR
Closes #123, #245, #992
Revert還有一種特殊情況,如果當前 commit 用於撤銷以前的 commit,則必須以revert:開頭,後面跟著被撤銷 Commit 的 Header。
revert: feat(pencil): add 'graphiteWidth' optionbrbrThis reverts commit 667ecc1654a317a13331b17617d973392f415f02.
Body部分的格式是固定的,必須寫成This reverts commit <hash>.,其中的hash是被撤銷 commit 的 SHA 識別符號。
如果當前 commit 與被撤銷的 commit,在同一個釋出(release)裡面,那麼它們都不會出現在 Change log 裡面。如果兩者在不同的釋出,那麼當前 commit,會出現在 Change log 的Reverts小標題下面。
如何使用透過配置git模板使用建立commit message模板文字格式的按照自己的習慣建立就好,比如 建立一個檔案.gittemplate.txt
fix(scope): subject (#124)brbrdescbrbrPR Close #37594brbr型別欄位包含:br feat:新功能(feature)br fix:修復bugbr docs:文件(documentation)br style: 格式化 ESLint調整等(不影響程式碼執行的變動)br refactor:重構(即不是新增功能,也不是修改bug的程式碼變動)br test:增加測試br chore:構建過程或輔助工具的變動br影響範圍:br 用於說明 commit 影響的範圍,比如修改的登入頁、賬戶中心頁等br主題:br commit目的的簡短描述,不超過50個字元brJIRA:br 如果有對應的jira 請附上jira號brBody 部分是對本次 commit 的詳細描述,可以分成多行brFooter用來關閉 Issue或以BREAKING CHANGE開頭,後面是對變動的描述、br 以及變動理由和遷移方法
裡面你感覺不需要的都可以去掉. 提交的時候,git commit這一部分會自動展示到commit message裡 手動刪除不需要的,只留需要的一部分就可以.
配置gitconfig可以配置到單個專案的git config裡 也可以配置到全局裡,這個看個人使用情況
[commit]br template= D:\\document\\wwwroot\\.gittemplate.txt
注意windows下路徑要加雙斜槓 不然會報錯
TortoiseGit裡使用右鍵選單->TortoiseGit->setting->Git Edit local .git/config(當前倉庫) 或者 Edit global .gitconfig (全域性)
Commitizen自動校驗Commitizen是一個撰寫合格 Commit message 的工具,會在提交時候校驗commit message是否規範。
此種方式因為需要安裝node環境等,我這邊感覺不太需要,就沒有強制使用.需要的可以參看其他文章也有很多,這裡就不再贅述
生成ChangeLog如果你的所有 Commit 都符合 Angular 格式,那麼釋出新版本時, Change log 就可以用指令碼自動生成(例1,例2,例3)。
生成的文件包括以下三個部分。
New featuresBug fixesBreaking changes.
每個部分都會羅列相關的 commit ,並且有指向這些 commit 的連結。當然,生成的文件允許手動修改,所以釋出前,你還可以新增其他內容。
conventional-changelog安裝npm install -g conventional-changelog
追加生成
cd my-projectbrconventional-changelog -p angular -i CHANGELOG.md -w
上面命令不會覆蓋以前的 Change log,只會在CHANGELOG.md的頭部加上自從上次釋出以來的變動。
生成所有conventional-changelog -p angular -i CHANGELOG.md -w -r 0
使用命令簡化
為了方便使用,可以將其寫入package.json的scripts欄位。
{ "scripts": { "changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0" }}
以後,直接執行下面的命令即可。
npm run changelog
配套外掛gruntgulpatomvscode樣例一行的
docs(changelog): update changelog to beta.5
有body的
fix(release): need to depend on latest rxjs and zone.jsbrbrThe version in our package.json gets copied to the one we publish, and users need the latest of these.
三者都有的
ci: decrease payload size limit for integration tests (#37784)brbrThis commit updates the payload size limit for the `hello_world` test app built using Closure. This is likely an effect of the changes in #36578 (that reduces the bundle size for most of the apps) and additional changes in subsequent commits.brbrPR Close #37784
更多樣例直接檢視Angular Commit 就可以
引用1 .阮一峰的部落格
2.知乎:關於 Git 提交這些規範,你都遵守了嗎?
3 Contributing to Angular