1 前言
Git Commit Message 應該清晰明瞭,要用精簡的語言說明本次提交的目的,其主要做用是爲
了後續的搜索、版本的回滾、合併衝突的追溯等操做。 vue
咱們在開發時一直以來對 Git Commit 格式有個約定俗稱的要求,因此就沒落實明確的規範。
由於沒有明確的規範,就會致使提交的消息較爲隨意。甚至出現「「.」、」Update」」這樣的消息。git
直到我在 GitHub 上發現了這條 Commits 時,才意識到提交信息也該規範起來。 github
如下圖舉例,當代碼出現 Bug 時,應該回滾到哪一個版本?
回滾到 「朕與將軍解戰袍,芙蓉暖賬度春宵」 嗎?
這條記錄所變動的內容是啥,看概要我一律不知。 ︿( ̄︶ ̄)︿json
爲了解決規範問題,我參考了一些的開源項目,當發現 commitizen 庫時,才知道好多大型開
源(AngularJS、VueJS)項目早已使用了它。因此在接下來我會介紹一下 commitizen 工具所
使用 Google AngularJS 規範。微信
2 規範介紹
此次主要介紹 AngularJS 的規範,它是由 Google 推出的一套提交消息規範標準,也是目前使
用範圍最廣的規範。有一套合理的手冊也較爲系統化;而且還有配套的工具能夠供咱們使用。ide
說白了,規範就是用工具進行強約束。單看規範比較簡單,因此先讓你們先看看面,知道他的
大致規則後,在來說細節。工具
規範執行方案以下: ui
既然有了方案,就會按照某些規則執行,如下是 Google AnguarJS 規範的要求:google
規範目標
- 容許經過腳本生成 CHANGELOG.md
- 能夠經過範圍的關鍵詞,快速的搜索到指定版本spa
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