1 前言
Git Commit Message 應該清晰明了,要用精簡的語言說明本次提交的目的,其主要作用是為
了后續的搜索、版本的回滾、合並沖突的追溯等操作。
我們在開發時一直以來對 Git Commit 格式有個約定俗稱的要求,所以就沒落實明確的規范。
因為沒有明確的規范,就會導致提交的消息較為隨意。甚至出現「“.”、”Update”」這樣的消息。
直到我在 GitHub 上發現了這條 Commits 時,才意識到提交信息也該規范起來。
以下圖舉例,當代碼出現 Bug 時,應該回滾到哪個版本?
回滾到 “朕與將軍解戰袍,芙蓉暖帳度春宵” 嗎?
這條記錄所變更的內容是啥,看概要我一概不知。 ︿( ̄︶ ̄)︿
為了解決規范問題,我參考了一些的開源項目,當發現 commitizen 庫時,才知道好多大型開
源(AngularJS、VueJS)項目早已使用了它。所以在接下來我會介紹一下 commitizen 工具所
使用 Google AngularJS 規范。
2 規范介紹
這次主要介紹 AngularJS 的規范,它是由 Google 推出的一套提交消息規范標准,也是目前使
用范圍最廣的規范。有一套合理的手冊也較為系統化;並且還有配套的工具可以供我們使用。
說白了,規范就是用工具進行強約束。單看規范比較簡單,所以先讓大家先看看面,知道他的
大體規則后,在來講細節。
規范執行方案如下:
既然有了方案,就會按照某些規則執行,以下是 Google AnguarJS 規范的要求:
規范目標
- 允許通過腳本生成 CHANGELOG.md
- 可以通過范圍的關鍵詞,快速的搜索到指定版本
git log HEAD --grep feat(package.json) # 在package.json文件里新增的特性。
格式要求
<type>(<scope>): <subject> <BLANK LINE> <body> <BLANK LINE> <footer>
- 消息只占用一行,任何行都不能超過 100 個字符
- 允許使用 GitHub 以及各種 Git 工具閱讀消息
- 提交消息由頁眉、正文和頁腳組成,由空行分隔
<type>
代表某次提交的類型,比如是修復一個 bug 或是增加一個 feature,類型如下:
類型 描述
<scope>
范圍可以是指定提交更改位置的任何內容,如:
- 對 package.json 文件新增依賴庫,chore(package.json): 新增依賴庫
- 或對代碼進行重構,refacto(weChat.vue): 重構微信進件
<subject>
如果沒有更合適的范圍,可以直接寫提交內容
Commit 實戰
提交一條依賴庫變更,type 為 chore(增加依賴庫);等提交完成后,使用 Git 工具進行搜索。
此時搜索類型是 chore(package.json),所以就能知道 package.json 文件所有的歷史變更。
# 新增一條 Commit 記錄 git commit -m 'chore(package.json): 新增 AngularJS 規范,Commit 時會自動調用鈎子(GitHook)來判斷 Message 是否有效' # 搜索跟 package.json 文件相關的歷史記錄 git log HEAD --grep chore(package.json)
3 工具介紹
因為是 Google AngularJS 的標准規范,所以提供了多種工具。如生成 CHANGELOG.md,提
交工具,檢查工具。
工具列表:
1. 提交工具 commitizen,如果是初學者,可以使用 commitizen 幫助我們生成消息
2. 生成 CHANGELOG.md,把 Git Commit Message 的消息自動生成 CHANGELOG.md
3. Message 檢查,是否有 “不符合” 規范的內容,可以在 GitHook 中使用
提交以及檢查工具相對來說簡單,大家自學即可,所以我以生成 CHANGELOG.md 舉例。
# 安裝 CHANGELOG 生成器 yarn global add standard-version # 生成文檔 standard-version --first-release
文檔生成后,當前目錄下就有 CHANGELOG.md 文件了,如果是 Node 項目,也會自動更新
package.json version 的版本號
這是根據 Git Commit Message 歷史記錄所生成的 CHANGELOG.md,在也不用手寫了。( ̄▽ ̄)"
4 參考鏈接
commitizen
https://github.com/commitizen/cz-cli
https://github.com/conventional-changelog/conventional-changelog
https://github.com/marionebl/commitlint
中文規范
https://github.com/feflow/git-commit-style-guide
AngularJS 規范
https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#heading=h.greljkmo14y0
https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#toc10