團隊使用的是Trunk-based development的Release Flow
圖片及更多資訊來自:https://cloud.google.com/solutions/devops/devops-tech-trunk-based-development
某次Release出去的功能有問題,因此緊急做了Hot Fixed。但因為是在Release Branch上做Hot Fixed,當下修完後就忘了要Merge回Master了。問題便發生在下一次做Release時,因為Master上並沒有上次修復的改動,所以新的Release Branch上就不會有這個改動。因此問題便發生了。
因此有了Master不得Commit,只能由其他Branch Merge進來;而Release Branch只能從Master做Merge或Cherry Pick過來的規則。
上一章提到的是Commit-Msg。這一章要動工的地方是Pre-Commit,他在Commit-Msg之前就會先執行到。在這階段拿不到Commit-Msg,我們也沒有打算要拿。我們目的只有要判斷當前的Branch為何,來提醒開發人員現在在錯誤的Branch上開發。
Line 3 git rev-parse --abbrev-ref HEAD
為取得當前分支名稱,Pipe給 tr '[:upper:]' '[:lower:]'
轉成小寫。
Line 4 之後就是很簡單的判斷是否是release branch名開頭的Branch,又或者是Master了。
如此一來每次在Master Commit時,就會因為跑到Pre-commit階段判斷不通過,出現提醒我要到一班Branch做完事情再提交MR回到Master了 :3