團隊想要有一致的Commit Msg,但是習慣不好養成,更難免有意外發生打錯字。
若我們今天想要Follow一種特定的格式,這邊我就舉我的習慣為例:
我想要的格式有點像Angular Commit Message的格式。
這是 Angular Commit Message Conventions 可以參考參考。
Subject line會長這樣:<type>(<scope>): <subject>
type代表我的Commit類型是什麼,例如test、refactor、fix、feat、urgent。
scope代表我的改動主要是哪個功能,方便一眼看出這個Commit跟哪個功能有關。
subject更多我想補充的資訊,通常我會說我做了什麼。
例如:feat(order): support multi language
refactor(order): fix duplicate code
所以我們會有一個commit-msg檔在hooks資料夾底下,內容大概如下:
Line 2 :$1
在Commit Msg這邊是作為存放我打在Commit欄位內容的檔案路徑,利用cat $1
把$1
這個檔案路徑內的數值給讀取出來,再把它包成一個變數賦予給messasge
。
Line 4 :
這邊我定義了格式應該符合的標準。
這段regex意思是,只要是test|refactor|fix|feat|urgent
任一個詞開頭,後面接上一組(任意內容)
,再接上: 任意內容
。
Line 5 :
另一種格式標準。
意思是或者是Merge Branch
開頭的字眼的話(這個情境我是為了自動產生出來的Merge commit訊息而建立的)
Line 7 :
做了判斷,只要符合Line 4或Line 5任一種情境,就給過。
Line 9 :
不然就印出錯誤訊息,提示我打錯囉我該遵照什麼格式下Commit。並回傳1,阻擋Commit Msg進行。