commit 提交規範

commit 格式

<type>(<scope>) : <subject>
<空行>
<body>
<空行>
<footer>
複製代碼
  • type:本次提交的類別,必填
  • scope:影響範圍,能夠不填
  • subject:提交的標題,一句話歸納提交的內容
  • body:詳細描述提交的內容,能夠不填
  • footer:放置寫備註啥的,若是是 bug ,能夠把bug id放入

Header

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

type

type用於說明 commit 的類別,只容許使用下面標識。npm

  • feat:新功能(feature)
  • fix:修補bug
  • docs:文檔(documentation)
  • style: 格式(不影響代碼運行的變更)
  • refactor:重構(即不是新增功能,也不是修改bug的代碼變更)
  • test:增長測試
  • chore:構建過程或輔助工具的變更
  • merge:合併分支
  • perf:優化相關,好比提高性能、體驗
  • revert:回滾到上一個版本
  • build:構建

若是 typefeatfix,則該 commit 將確定出如今 Change log 之中。json

scope

scope 用於說明 commit 影響的範圍,好比數據層、控制層、視圖層等等,視項目不一樣而不一樣。bash

subject

subject 是 commit 目的的簡短描述,不超過50個字符。工具

Body

Body 部分是對本次 commit 的詳細描述,能夠分紅多行。下面是一個範例。性能

More detailed explanatory text, if necessary.  Wrap it to 
about 72 characters or so. 

Further paragraphs come after blank lines.

- Bullet points are okay, too
- Use a hanging indent
複製代碼

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. 複製代碼
  2. 關閉 Issueui

    若是當前 commit 針對某個issue,那麼能夠在 Footer 部分關閉這個 issue 。

    Closes #234
    複製代碼

    也能夠一次關閉多個 issue 。

    Closes #123, #245, #992
    複製代碼

工具

Commitizen

  1. 安裝

    $ npm install -g commitizen
    複製代碼
  2. 在項目目錄裏運行下面命令

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

之後,凡是用到git commit命令,一概改成使用git cz。這時,就會出現選項,用來生成符合格式的 Commit message。

commitlint & husky

  1. 安裝

    $ npm i @commitlint/cli @commitlint/config-conventional husky -D
    複製代碼
  2. 配置 commitlint.config.js 在項目根目錄下新建 commitlint.config.js, 內容以下:

    module.exports = {
      extends: ['@commitlint/config-conventional'],
      rules: {
        'subject-case': [0, 'never'],
        'type-enum': [
          2,
          'always',
          [
            "docs", // Adds or alters documentation. 僅僅修改了文檔,好比README, CHANGELOG, CONTRIBUTE等等
            "chore", // Other changes that don't modify src or test files. 改變構建流程、或者增長依賴庫、工具等 "feat", // Adds a new feature. 新增feature "fix", // Solves a bug. 修復bug "merge", // Merge branch ? of ?. "perf", // Improves performance. 優化相關,好比提高性能、體驗 "refactor", // Rewrites code without feature, performance or bug changes. 代碼重構,沒有加新功能或者修復bug "revert", // Reverts a previous commit. 回滾到上一個版本 "style", // Improves formatting, white-space. 僅僅修改了空格、格式縮進、逗號等等,不改變代碼邏輯 "test", // Adds or modifies tests. 測試用例,包括單元測試、集成測試等 "build" // 構建 ] ] } }; 複製代碼
  3. 修改package.json 文件夾

    在package.json 中添加husky 配置

    ...
    
    "husky": {
      "hooks": {
        "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
      }
    },
    
    ...
    複製代碼

conventional-changelog

conventional-changelog 就是生成 Change log 的工具,運行下面的命令便可。

$ npm install -g conventional-changelog-cli
$ cd my-project
$ conventional-changelog -p angular -i CHANGELOG.md -w
複製代碼

上面命令不會覆蓋之前的 Change log,只會在 CHANGELOG.md 的頭部加上自從上次發佈以來的變更。

若是你想生成全部發布的 Change log,要改成運行下面的命令。

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

爲了方便使用,能夠將其寫入package.json的scripts字段。

{
  "scripts": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0"
  }
}
複製代碼

之後,直接運行下面的命令便可。

$ npm run changelog
複製代碼
相關文章
相關標籤/搜索