項目中的 git message 規範

Git 每次提交代碼,都要寫 Commit message 來講明本次的提交內容。vue

git commit -m "hello word"
複製代碼

當提交的內容比較多的時候, 能夠執行 git commit, 使用跳出來的文原本編輯提交信息。git

git commit 
複製代碼

在項目開發過程當中, 使用 git commit 提交的信息能夠很好的反應項目的開發進展狀況。 因此應當規範 git message 的格式, 來更加清晰明瞭的說明每次的提交目的。github

Angular Commit message

關於 Git message 的寫法規範社區中有不少種, 目前使用較爲普遍的是 Angular 規範npm

Angular 規範中, 每次提交, Commit message 都包括三個部分: Header、Body 和 Footer;編程

<type>(<scope>):<subject>  ## header 部分
// 空一行
<body>   ## body 部分
// 空一行
<footer>  ## footer 部分
複製代碼

::: tipjson

  1. 這三個部分種, Header 是必須的, Body 和 Footer 能夠省略。
  2. 無論哪一個部分,爲了在輸出 log 時的美觀,任何一行的都不得超過 72 個字符。 :::

Header 部分

Header 部分只有一行, 包括三個字段: type(必須)、scope(可選)、subject(必須);bash

type

type 用於說明 commit 的類型, 在 Angular 規範 種, 只容許 7 種經常使用類型和一種特殊類型(revert):工具

feat: 新功能 (feature)
fix: 修補 bug
docs: 文檔 (ocumentation)
style: 格式 (不影響代碼運行)
refactory: 重構 (既不是新增功能, 也不是修改 bug 的代碼改動)
test: 增長測試
chore: 構建過程或輔助工具的變更
revert: 撤銷之前的 commit; header 部分須要跟被撤銷 Commit 的 Header 
複製代碼

scope

scope 用於說明 commit 影響的範圍, 好比說數據層、控制層、視圖層等等測試

subject

subjectcommit 的簡短描述, 不超過 50 個字符。ui

::: tip 以動詞開頭, 使用第一人稱如今時, 好比 change 而不是 changed 或者 changes 第一個字母小寫 結尾不加句號 :::

body

body 部分是對本次 commit 的詳細描述, 能夠分爲多行。

footer

在不少狀況下, 是不使用這部分的內容的, 可是在下面兩種狀況下,回使用到 footer

  1. 不兼容變更說明 若是當前代碼與上一個版本不兼容, 則 footer 部分須要使用 BREAKING CHANGE 開頭, 後面是對變更的描述以及變更理由和變更方法.
BREAKING CHANGE: isolate scope bindings definition has changed.

    To migrate the code follow the example below:

    Before:

    scope: {
      myAttr: 'attribute',
    }

    After:

    scope: {
      myAttr: '@',
    }

    The removed `inject` wasn't generaly useful for directives so there should be no code using it. 複製代碼
  1. 關閉 Issue 若是當前 commit 是針對 某個或者某幾個 issue, 那個能夠在 footer 部分關閉 issue
Closes #123
複製代碼

關閉多個 issue

Closes #123, #234, #345
複製代碼

Commitizen

在項目的開發過程當中,編程人員遵照 Angular 規範 須要編寫更多的 git message 信息, 使用 Commitizen 來進行交互式的 message 輸入。

  • 安裝
npm install -g commitizen
複製代碼

而後,在項目目錄裏,運行下面的命令,使其支持 Angular 的 Commit message 格式。

commitizen init cz-conventional-changelog --save --save-exact
複製代碼

當須要 git commit 的時候使用 git cz 來生成符合規範的 git message.

commitlint 校驗 message

git cz 命令爲 git message 提供了一個規範的 message 模板, 這時使用 git commit -m 或者 使用 git cz 依舊不能嚴格限制 git message 內容, 爲了嚴格規範須要使用 commitlint 來拒毫不規範的 git message 內容。

  • 安裝
npm install --save-dev @commitlint/config-conventional @commitlint/cli
複製代碼
  • 添加配置文件 (爲了使 commitlint 生效)
echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js
複製代碼
  • 或者在 package.json 文件中添加
"commitlint": {
    extnds: [
        "@commitlint/config-conventional"
    ]
}
複製代碼

觸發 commitlint

配置好 commitlint, 還須要設置 觸發 commitlint 的時機。

Git 中自帶不一樣的 hook, 當某些事件發生的時候,會觸發相對應的 hook, 這些 hook 腳本存放在項目根目錄的 .git/hooks 目錄下。

commit-msg 是其中一個 hook, 在 git commit 提交的時候觸發。 可使用 husky 來自定義 commit-msg 觸發時候的事件。

ghooks

  • 安裝 npm install husky -D

  • package.json 中添加代碼

"config": {
    "ghooks": {
      "commit-msg": "commitlint -e $GIT_PARAMS"
    }
  }
複製代碼

git commit-msg 這個鉤子中會觸發 commitlint 的操做。

配合 lint-staged 進行代碼檢驗和修復

在完成了 git message 的校驗以後, 能夠繼續使用 lint-stagedgit hooks 來進行代碼提交前的語法、風格的驗證和修復。

  1. 安裝 npm install -D lint-staged

  2. 在跟目錄下建立 .lintstagedrc, 並寫入

{
    "*.{js,vue}": ["eslint --fix", "git add"]
}

複製代碼
  • 或者在 package.json 中寫入
"lint-staged": {
    "*.{js,vue}": ["eslint --fix", "git add"]
}
複製代碼
  1. husky 配置中添加觸發時機
"husky": {
  "hooks": {
    "pre-commit": "lint-staged"
  }
}
複製代碼

這樣在每次提交以前都會觸發 pre-commit 這個 hook, 從而觸發 .lintstagedrc 或者 package.json 中的 lint-staged 裏面的配置。 在例子中,咱們配置了對全部 .js 或者 .vue 結尾的文件進行 eslint 的修復, 而且當修復以後再次執行 git add 將修改後的文件再次放到暫存區。 這樣就能夠保證每次提交的代碼都是統一風格的代碼了。

::: tip lint-staged 只對這次提交所在暫存區的文件(git add後的文件)進行一系列的檢查、修復、格式化操等做。 :::

自動生成 Change log 並更新 Version

當使用 Angular 規範 提交 git message, 還可使用 standard-version生成 Change log 文檔。 生成的文檔將會包括下面三個部分。

new features   // 新增功能記錄
bug fixes   // 解決 bug 記錄 
breaking changes   // 不兼容變更記錄
複製代碼

每一部分都會列出相關的 commit, 而且指向這些 commit 的鏈接。 conventional-changelog 使用以下:

  1. 安裝
npm install -g standard-version
複製代碼
  1. package.json 中添加 script 字段
"script": {
  "release": "standard-version"
}
複製代碼

運行 npm run release 將會執行下面的步驟。

1. 修改 package.json package-lock.json 中的版本號
2. 生成 CHANGELOG.md 文件。 
3. 提交  package.json package-lock.json CHANGELOG.md 文件
4. 給本次提交打上 tag
複製代碼

相關文章
相關標籤/搜索