前言:
現今軟體功能複雜與龐大,在開發過程中,不管單人開發還是多人協作,對所編寫的代碼與代碼版本管控都是必須的,其中,大多人採用Git來解決以下幾點問題:
- 代碼遺失風險
- 多人合作同時編輯專案
- 版本管理複雜
- 等等…
Git是什麼?
git是用於Linux核心開發的版本控制工具。 與CVS、Subversion一類的集中式版本控制工具不同,它採用了分散式版本庫的作法,不需要伺服器端軟體,就可以運作版本控制,使得原始碼的釋出和交流極其方便。git的速度很快,這對於諸如Linux核心這樣的大專案來說自然很重要。git最為出色的是它的合併追蹤(merge tracing)能力。
source: https://zh.wikipedia.org/wiki/Git
Git提供了切分支與主幹的方式,在多功能開發時,避免互相衝突,現在也有很多工具,強化了Git的狀態顯示,如下圖:

圖片來源:VSCode Git Graph 套件
不過,現在開發人員不只追求在專案架構與代碼內容可讀性之外,對於版本控制的內容,如果沒有一個規範,有可能會造成:
- 提交PR給他人Review,需花時間理解
- 不同習慣的 commit,造成資訊雜亂
- 專案換不同人接手後,要花大量時間閱讀
在其他地方也有討論
commit message 是开发的日常操作, 写好 log 不仅有助于他人 review, 还可以有效的输出 CHANGELOG, 对项目的管理实际至关重要, 但是实际工作中却常常被大家忽略.
source: https://juejin.cn/post/6844903606815064077
因此,如何規範一套Git commit規則,也是大多團隊都會面臨的問題,討論出規範後,再藉由工具的輔助,在日後的提交中,也省去花費時間思考查看提交的規範。
🛠️ git cz:
替代原本git commit命令改用git cz方式提交,並可以透過它提供的adapter自定義提交規範(預設為Angular的開發提交範例),當提交輸入對應內容完成後,會自動幫忙產生commit message。
安裝Node:
再來依照個人或團隊需求,選擇全局(全部有綁git專案)或針對一個專案局部設定規範,以下以全域安裝為主
安裝git cz:
npm install -g git-cz
使用效果

自訂義規範
- Mac系統的部分在根目錄下建立changelog.config.js檔案,將以下貼進去就可以了(?不確定沒有試過
- windows 是需要在user底下新增此檔案
module.exports = {
disableEmoji: false, // 是否禁用 emoji
format: '{type}{scope}: {emoji}{subject}', // Commit 訊息的格式
list: ['test', 'feat', 'fix', 'WIP', 'docs', 'refactor', 'style', 'chore', 'revert'], // Commit 類型的清單
maxMessageLength: 64, // Commit 訊息的最大長度
minMessageLength: 3, // Commit 訊息的最小長度
questions: ['type', 'scope', 'subject', 'body', 'breaking', 'issues', 'lerna'], // 問題的清單
scopes: [], // Commit 範圍的清單
types: { // Commit 類型的清單
WIP: {
value: 'WIP',
description : '暫存工作。',
emoji: "💪"
},
chore: {
description: '修改建置流程、包管理、構建過程或輔助工具的變動。不包含修改測試檔、src 裡的檔案。',
emoji: '🗯',
value: 'chore'
},
docs: {
description: '修改文件。',
emoji: '📚',
value: 'docs'
},
feat: {
description: '新增功能。',
emoji: '✨',
value: 'feat'
},
fix: {
description: '修復 bug。',
emoji: '🐛',
value: 'fix'
},
revert: {
description: '撤銷、復原一次 git commit。',
emoji: '⏪',
value: 'revert'
},
refactor: {
description: '重構、優化程式碼,不是新功能或是修復 bug。',
emoji: '🛠',
value: 'refactor'
},
style: {
description: '修改程式碼的風格,不會對產品有任何的功能變動 (空白鍵、格式化、分號...等)。',
emoji: '💅',
value: 'style'
},
test: {
description: '新增或修改現有的測試',
emoji: '🏁',
value: 'test'
},
},
messages: { // Commit 的提示訊息描述
type: '<type> 用於說明 commit 的類別,只允許使用下面 9 個標識: \\n',
customScope: '<scope> 自定義影響範圍,請精簡扼要但不失原意: \\n',
subject: '<subject> 目的的簡短描述,不超過 100 個字符: \\n',
body: '<body> 對本次 commit 的詳細描述,使用第一人稱,應該說明代碼變動的動機,以及與以前行為的對比,可以使用 "|" 分成多行 (可選):\\n',
breaking: '<breaking> 對破壞性變動(Breaking Change)的描述、以及變動理由和遷移方法 (可選):\\n',
footer: '<footer> 針對的 issue,像是:#520, #1314 (可選):\\n',
confirmCommit: '<confirm commit> 請確認以上描述。',
},
};
windows系統需要多下以下指令
npm install -g commitizen
npm install --save-dev git-cz
並下指令
echo '{ "path": "git-cz" }' > ~/.czrc
接下來對檔案下以下指令就可以了
git add .
git cz
windows系統中 可能會出現以下錯誤
$ git cz
The config file at "C:\\Users\\USER\\.czrc" contains invalid charset, expect utf8
那需要到目錄下將 .czrc 這個檔案刪除,建立新檔案貼上以下內容
{ "path": "git-cz" }
使用效果

選擇後逐步填寫資訊

push 後github上顯示內容如下


參考資料
- Git cz相關