Git commit message的自我修養

Git commit 的介紹

git官網咱們能夠知道Git commit做用是記錄對倉庫的修改node


在平常開發中,使用Git命令最多的應該就是Git commit ,然而書寫規範的commit message可以提升開發人員的代碼維護升級效率,在能快速方便排查問題。那麼commit message的規範就十分重要了git

Git commit message的規範

目前使用比較多的規範是Angular規範,阿里、滴滴也有在使用。github

Angular的的文檔能夠看到commit message的格式npm

<type>(<scope>): <subject>   <body> // 主體,對提交進行詳細的描述<footer>複製代碼

由文檔可知有三部分,分別爲json

  1. Header 消息頭,type:包含類型(必填),scope:做用域(影響的模塊/文件)(選填), subject:簡短描述(必填)
  2. Body 主體,填寫這次更改的詳細描述
  3. Footer,在出現如下兩種狀況時須要填寫
    1. Breaking changes:是否出現重大改變,例如版本升級、接口升級、架構調整、項目分離遷移合併等
    2. affect issues:這次提交是否影響到某個問題

type類型有如下幾種:gulp

  • feat: 新的功能(feature)
  • fix:Bug問題修復
  • improvement: 對現有功能的改進
  • docs :文檔改動(eg:md文件)
  • style: 代碼格式的變更(注:不是樣式,是指代碼的空格、縮進、換行、標點符號等)
  • refactor: 重構
  • perf: 性能優化(performance)
  • test: 測試文件更新
  • build: 構建系統或者包依賴更新(eg: gulp、npm、broccoli)
  • ci: CL配置,腳本文件等更新(eg:Travis持續集成服務、)
  • chore: 非src或者測試文件的更新
  • revert: commit 回滾

Commitizen工具:提供符合規範的git commit 規範

Commitizen是一款能生成標準規範的commit信息工具。性能優化

使用環境:node > 6.0 bash

儘管該工具兼容低版本node,但該工具是在node10.x和12.x的環境下測試的,因此使用環境最好是大於node6.0架構

Commitizen安裝ide

npm install -g commitizen
或本地安裝
npm install -save-dev commitizen複製代碼


cz-conventional-changelog 適配器安裝(可用腳本生成commit文檔)

npm install -g cz-conventional-changelog複製代碼

上一步安裝完後,須要在根目錄添加配置文件.zcrc

{ "path": "cz-conventional-changelog" }複製代碼

接下來執行commitizen命令,會自動在package.json中添加相應的配置

// 執行命令
commitizen init cz-conventional-changelog --save-dev --save-exact
或是使用yarn
commitizen init cz-conventional-changelog --yarn --dev --exact

//package.json自動生成以下
"config": {
    "commitizen": {
      "path": "cz-conventional-changelog"
    }
 }複製代碼

完成上述步驟咱們就能夠在提交代碼時用工具生成git commit模板,用git cz 命令 替換 git commit來使用。


因爲引入新的依賴,選擇build

依次下來填寫/選擇

  • 本次改動的組件或者文件名
  • 簡短描述(不超過79個字符)
  • 詳細描述
  • 是否出現重大改變
  • 這次提交是否影響/修復到某個問題


從gitlab倉庫上面的commit記錄就能夠清楚的看到提交的信息



若是咱們git cz 選擇了有重大改變(breaking changes),會多一行關於重大改變的描述須要輸入


倉庫commit上也會多出一行BREAKING CHANGE描述



若是提交的代碼涉及到修復issues問題,那麼提交時能夠選擇是否影響到issues問題,此時須要輸入issues信息(e.g. "fix #123", "re #123".)


倉庫的提交記錄就會自動關聯上issues問題,點擊#1便可跳轉issues問題頁面。此時只是關聯,並不能改變倉庫issues問題的狀態,若是須要影響到問題的狀態,還須要安裝配置jira



生成 Change log

若是咱們提交的commit都符合Angular格式,執行下列命令則能夠在根目錄生CHANGELOG.md。生成的文檔包含三個模塊:feature、bug、breaking change

// 此命令不會覆蓋以前的Change log,而是會在CHANGELOG.md頭部加上 上次發佈到如今的改動
conventional-changelog -p angular -i CHANGELOG.md -s複製代碼

若是要生成全部的change log,能夠執行下列命令

conventional-changelog -p angular -i CHANGELOG.md -w -r 0複製代碼


爲了不每次都輸入那麼長的命令行,能夠在package.json定義命令


// 生成上次發佈到如今的改動
npm run changelog

//生成全部改動
npm run allChangelog
複製代碼

生成的日誌文檔以下,哪一天修復新增改動了一目瞭然,還能夠直接連接到gitlab倉庫對應的commit-id


可是上面有個地方須要注意:在生成changelog日誌以前,須要用下面的命令更新一下package.json的版本號,若是不作這一步,會致使每次提交都會帶上以前重複的日誌

npm version 版本號複製代碼

git commit 格式校驗

有了commit規範就須要有校驗,那麼格式校驗須要用到commitlint、husky

commitlint:用以配置commit message的格式

husky: 是一個git hook的管理工具,實現了大部分的git hook(git命令的鉤子)

運行環境:Node >= 8.6.0  和    Git >= 2.13.0.


// commitlint安裝
npm install --save-dev @commitlint/{cli,config-conventional}

//建立commitlint配置文件
echo "module.exports = {extends: ['@commitlint/config-angular']};" > commitlint.config.js
//Husky安裝
npm install --save-dev husky

//在package.json添加husky配置,與script平級
"husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }  
  }複製代碼

測試

若是不符合規範的commit提交,commit會被攔截


符合校驗的commit message則會被經過提交


目的

  • 統一開發團隊的commit規範,方便後續代碼維護
  • 給予其餘開發人員提供有效的歷史提交信息
相關文章
相關標籤/搜索