首頁>技術>

為什麼需要規範團隊開發時候,規範可以團隊的產出更多的去個性化,向團隊化. 除了常見的程式碼規範,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) scope

scope用於說明 commit 影響的範圍,比如資料層、控制層、檢視層等等,視專案不同而不同。

(3) subject

subject是 commit 目的的簡短描述,不超過50個字元。

以動詞開頭,使用第一人稱現在時,比如change,而不是changed或者changes第一個字母小寫-漢語忽略結尾不加句號(.)

Body

Body 部分是對本次 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)應該說明程式碼變動的動機,以及與以前行為的對比。

Footer

Footer 部分只用於兩種情況。

(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

8
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 高頻接收模組ATA5781的開發(二)