Git Commit 標準化

 

 

1 前言
Git Commit Message 應該清晰明瞭,要用精簡的語言說明本次提交的目的,其主要做用是爲
了後續的搜索、版本的回滾、合併衝突的追溯等操做。 vue

咱們在開發時一直以來對 Git Commit 格式有個約定俗稱的要求,因此就沒落實明確的規範。
由於沒有明確的規範,就會致使提交的消息較爲隨意。甚至出現「「.」、」Update」」這樣的消息。git

直到我在 GitHub 上發現了這條 Commits 時,才意識到提交信息也該規範起來。 github

如下圖舉例,當代碼出現 Bug 時,應該回滾到哪一個版本?
回滾到 「朕與將軍解戰袍,芙蓉暖賬度春宵」 嗎?
這條記錄所變動的內容是啥,看概要我一律不知。 ︿( ̄︶ ̄)︿json


爲了解決規範問題,我參考了一些的開源項目,當發現 commitizen 庫時,才知道好多大型開
源(AngularJSVueJS)項目早已使用了它。因此在接下來我會介紹一下 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

相關文章
相關標籤/搜索