規範你的commit msg

混子的日常發表於2021-11-07

TL;DR:

? commitizen 使用

? commitlint 使用

? 可以直接抄走的配置

? git cz 的原理

可參考的程式碼庫

規範 commit msg 的意義

規範化、格式化的 commit message 可以讓我們更好的追蹤需求的演進、回滾時能夠快速的找到提交、最次也能讓我們的倉庫顯的更專業。

團隊如何規範 commit msg呢,靠宣講、靠文件?當然得靠工具生成和約束。前端圈輪子那麼多,這種工具不在話下。

  • commitizen 問答式生成 commit msg 格式化
  • commitlint 校驗卡控 commit msg 規範化

commitizen

commitizen: simple commit conventions for internet citizens.

commitizen/cz-cli 藉助它提供的 git cz 命令替代 git commit 命令,生成符合規範的 commit message。

commitizen 預設的提交規範是 angular 團隊強規定的,若想自定義我們還需配合 Adapter(介面卡)此處我們用cz-customizable。下面我們直接來介紹專案級配置。

進行 commitizen 配置

執行 npm install -D commitizennpm install -D cz-customizable命令

然後在 package.json檔案中 scripts 和 config 欄位進行配置

{
  "scripts": {
    "commit": "cz"
  },
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-customizable"
    },
    "cz-customizable": {
      "config": ".cz-configrc.js"
    }
  }
}

新增 .cz-configrc.js檔案,可參考 cz-demo

在專案的根目錄下執行 npm run commit試試吧

後續t npm run commit 替換 git commit

commitlint

如何保證組內成員都使用npm run commit命令呢?當然是用工具。

這裡我們用 commitlint,作用和 eslint 類似。利用 git hooks 攔截不符合規範的 commit msg。

安裝依賴

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

npm install yorkie --save-dev

新增 .commitlint.config.js 檔案

擴充套件開源配置,然後再新增部分個性化 rules
參考配置

如果你和我一樣對 Applicable always|never: never inverts the rule.很迷惑請閱讀連結

配置 git hooks

為了攔截不規範的 commit msg,需要利用 git hooks 的 commit-msg 自動執行 commitlint

"gitHooks": {
  "commit-msg": "commitlint -e $GIT_PARAMS"
}

亂輸入一個 commit msg 試試,發現非常神奇。卡控生效了

按照以上步驟就可以規範你們團隊的 commit msg了。

總結一下:

step 1: 安裝依賴

npm install -D commitizen cz-customizable
npm install -D @commitlint/{config-conventional,cli}
npm install -D yorkie 

step 2: 新增配置檔案

自定義格式的commitizen配置檔案 .cz-configrc.js ,校驗規範的 .commitlint.config.js 檔案

step 2: 配置 package.json

{
  "scripts": {
    "commit": "cz"
  },
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-customizable"
    },
    "cz-customizable": {
      "config": ".cz-configrc.js"
    }
  },
  "gitHooks": {
    "commit-msg": "commitlint -e $GIT_PARAMS"
  }
}

git cz 的原理

如果你是全域性按照的 commitizen,你還能用 git cz命令代替 npm run commit

git cz 是什麼玩意? git 的命令,還 commitizen 的命令。2臉懵逼 ???

通過查閱資料 git cz 是 commitizen 利用 git 的檔案命名規範生成的自定義 git 命令。cz-cli/issues

Git遵循命名約定git-<subcmd>自動解析PATH中可執行檔案中的子命令。 這些子命令可以用git <subcmd>執行。

我們看下 commitizen 倉庫 package.json 的 bin 欄位。真香大白了,就是 git 的自定義命令

 "bin": {
    "cz": "./bin/git-cz",
    "git-cz": "./bin/git-cz",
    "commitizen": "./bin/commitizen"
  },

最後

參考這個 demo 倉庫將你的程式碼庫武裝起來吧

原文地址

相關文章