Commitizen

閒聊一下

最近處於求職的階段,評估一份職缺的觀點也和過往不同; 以這篇文章來說,Git Commit Style 便是其中一點,詢問對方是否有固定的 commit 格式, 就可以大致上瞭解團隊的風格是哪種。 若還沒有個規範,或是想要參考的,可以繼續閱讀下去。

Git Commit

是以 AngularJS 的格式,區分成

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

其中 type、scope、subject、body、footer 等,有一定的規範, 詳細的內容可以在 angular.js/DEVELOPERS.md 看到。 這篇文章主要要介紹的是一個可以讓 commit 符合上述規範的工具 – Commitizen。

Commitizen

Commitizen 是以 Node.js 所開發出的一套工具,使用者可以透過它來處理 commit 的風格一致性。

安裝

我們可以透過 npm 的方式來取得

npm install -g commitizen

並且安裝 cz-conventional-changelog

npm install -g cz-conventional-changelog

在電腦中安裝完上述兩者之後,先切換到你所開發的 iOS 專案資料夾底下, 由於 Commitizen 是以 Node.js 開發,你需要在 iOS 專案裡頭建構一些 npm 所需要的環境, 故記得補上 npm 初始化以及使用 convertional-changelog

npm init
commitizen init cz-conventional-changelog --save --save-exact

輸入完專案相關資訊後,便可以使用 Commitizen 了!

使用

之後,就以 git cz 的方式來取代原本的 git commit; 若所在的專案並沒有使用 Commitizen 的話,系統則會自動以原先 git commit 的方式來進行。 執行 git cz 之後,會以選單的方式來一步步符合剛剛訂的規範。

自動驗證 Commit 是否符合 AngularJS

在多人開發的時候,我們可以透過 commit 之前先執行一段 JavaScript 來確保 commit 的格式符合要求,來避免專案之中的 commit style 有不一致的情況發生。 首先我們得先安裝一些套件

npm install semver-regex --save-dev
npm install ghooks --save-dev

並加入驗證的 validate-commit-msg.js 檔案以及在 package.json 之中宣告。

"config": {
    "ghooks": {
        "commit-msg":"./validate-commit-msg.js"
    }
 }

若發生了權限上的問題,如

/bin/sh: ./validate-commit-msg.js: Permission denied

則可以透過 chmod 來調整 validate-commit-msg.js 的存取權限。

chmod 755 validate-commit-msg.js

這樣一來,便大功告成了! 若有人在專案中下了不符合標準的 commit,如

git commit -m "Test"

則會無法順利完成動作,且得到錯誤訊息:

INVALID COMMIT MSG: does not match "<type>(<scope>): <subject>" !
test

CHANGELOG

CHANGELOG 的部分,在此規範下會以 Bug Fixes、Features、BREAKING CHANGES 這三種 type 來產出,意思是指其他的 type 並不會被寫進 CHANGELOG.md 裡頭。 我們可以執行

conventional-changelog -p angular -i CHANGELOG.md -w

來生成 CHANGELOG.md 檔案,也可以在 package.json 的 scripts 之中加入

{
    "scripts": {
        "changelog":"conventional-changelog -p angular -i CHANGELOG.md -w"
    }
}

這樣,之後只需要執行

npm run changelog

後記

在第一份工作時,便有嘗試引用進入到專案之中,不過那時候沒有完整地使用所有功能;

如驗證 commit、自動產生 CHANGELOG.md 等,

最近在整理 iOSTaiwan/resource 時,便認真的走過一次流程。

相關的檔案,如 .gitignore、validate-commit-msg.js、package.json 都可以在此專案中找到。

最後感謝 pofat 當初的分享,可以在 iOSTaiwan/resource 裡頭找到相關資源,

讓這次的建構流程跑起來算是順利,也祝福他新婚快樂💒

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus