專業協作開發:使用 Commitlint 規範你的提交訊息
一直以來,不論是過去在實習的時候或是做自己的專案的時候,我大都沒有特別在意我的 commit message 格式,直到去年加入目前的公司後,開發團隊要求以有固定的 commit message 格式提交 commit ,我才發現原來 GitHub 上大多數的知名開源專案也都有自己的 commit message 格式要求。這才意識到,對於多人協作開發的專案,保持 commit 訊息的一致性與可讀性對專案的長期維護是一件很重要的事情。
雖然我們團隊有很明確的 commit 規範,但是每當有新成員或外部支援加入開發時,在加入初期還不熟悉我們的開發習慣時,總會出現一些不符合規範的 commit 訊息。為了解決這個問題,我引入了 commitlint
這個工具。它能幫助我們在開發過程中自動檢查 commit message 是否符合預定的規範,從而確保每一次提交都符合團隊的標準。
認識 commitlint
commitlint
是一個用於檢查 git commit 訊息的工具,確保提交 訊息符合特定的規範。透過使用 commitlint,團隊可以保持一致的提交訊息格式,提升程式碼的可維護性和可讀性。
commitlint 的作用
commitlint 的主要作用是確保提交訊息符合預定的規範,常見的規範如 Conventional Commits 。這不僅有助於保持提交訊息的一致性,還能幫助開發團隊可以更有效地進行程式碼審查和協作,也有助於自動化使用 commit log 生成的 changelog 時,保持內容格式整齊一致。
Conventional Commits 規範
Conventional Commits 是一種提交訊息的命名規範,其結構如下:
<類型 type>[(可省略)作用範圍 scope]: <描述 description>
[(可省略)正文 body]
[(可省略)頁腳 footer]
commitlint 官方建議使用 @commitlint/config-conventional
作為擴展配置,這個配置基於 Angular 的提交訊息規範,提供了一組預定義的規則:
type
: 描述這次提交的類型,常見類型包括:build
: 影響構建系統或外部依賴的更改(例如範圍:gulp、broccoli、npm)ci
: 對持續集成(CI)配置文件和腳本的更改(例如範圍:Travis、Circle、BrowserStack、SauceLabs)docs
: 僅限文檔的更改feat
: 新功能fix
: 修復錯誤perf
: 提升性能的程式碼更改refactor
: 不屬於修復錯誤或新增功能的代碼更改style
: 不影響程式碼含義的更改(空白字符、格式化、缺少的分號等)test
: 添加缺失的測試或更正現有的測 試
scope
: 這次變更的影響範圍,例如模組或文件名稱。description
: 簡短描述這次變更的內容。body
: 對提交變更的詳細描述,可以分為多行。footer
: 列出重大變更(BREAKING CHANGE) 或關聯的問題追蹤 ID。
範例
下面分別舉一個符合規範和不符合規範的提交訊息範例:
- 符合規範的範例:
feat(parser): add ability to parse arrays
This commit adds a new feature that allows the parser to handle arrays.
BREAKING CHANGE: The `parse` function now returns an array instead of a string.
- 不符合規範的範例:
add new feature for parsing
- Added functionality to parse arrays
- Updated tests
在符合規範的範例中,我們可以清楚地看到提交的類型(feat
)、範疇(parser
)以及簡短的主題(add ability to parse arrays
)。而在不符合規範的範例中,缺少了明確的類型(type)。
安裝與基礎配置
安裝
要在專案中使用 commitlint
,首先需要安裝相關的套件。這裡我們還會安裝 husky
,用來在提交訊息時自動執行 commitlint
的檢查。
-
安裝
commitlint
及其配置套件:yarn add --dev @commitlint/{cli,config-conventional}
# Configure commitlint to use conventional config
echo "export default { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js -
安裝
husky
:yarn add --dev husky
yarn husky init
# Add commit message linting to commit-msg hook
echo "yarn commitlint --edit \$1" > .husky/commit-msg
基礎配置
安裝完套件後,我們需要進行一些基礎配置,使 commitlint
和 husky
能夠正常運作。
-
配置
commitlint.config.js
:在專案根目錄下新增一個
commitlint.config.js
檔案,並加入以下內容:module.exports = {
extends: ['@commitlint/config-conventional'],
};這個配置文件告訴 commitlint 使用 @commitlint/config-conventional 的規則來檢查提交訊息。
-
初始化 husky 並配置
.husky/commit-msg
:初始化 husky 來設置 git hooks:
yarn husky init
這會在專案根目錄下創建
.husky
目錄。接著,配置 commit-msg hook,使其在提交訊息時自動檢查訊息格式:
# Add commit message linting to commit-msg hook
echo "yarn commitlint --edit \$1" > .husky/commit-msg這樣,在每次提交訊息時,husky 都會執行 commitlint,確保提交訊息符合規範。