Commitizen

閒聊一下

最近處於求職的階段,評估一份職缺的觀點也和過往不同;

以這篇文章來說,Git Commit Style 便是其中一點,詢問對方是否有固定的 commit 格式,

就可以大致上瞭解團隊的風格是哪種。

若還沒有個規範,或是想要參考的,可以繼續閱讀下去。

Git Commit

是以 AngularJS 的格式,區分成

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

其中 typescopesubjectbodyfooter 等,有一定的規範,

詳細的內容可以在 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 FixesFeaturesBREAKING 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 時,便認真的走過一次流程。

相關的檔案,如 .gitignorevalidate-commit-msg.jspackage.json 都可以在此專案中找到。

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

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

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s