Git設定全域性hooks規範化客戶端提交日誌記錄
阿新 • • 發佈:2018-12-18
背景:
專案由於git進行管控,對commit的日誌需要進行規範化輸出,git的hooks預設管控單倉庫,在.git/hooks裡面,預設關閉,如果啟用的話將字尾.sample去掉。系統提供的commit檢驗是git文字的最後是否有空格,根據規定,需要進行規則自定義,實現專案提交記錄如:
1.增加:..功能;(xxx-xxx) 2.修改:..功能;(xxx-xxx) 3.解決:..問題;(xxx-xxx) 4.刪除:刪除某部分程式碼或資原始檔的過程;(xxx-xxx) 5.備註:說明一個過程或者需要闡述某個階段的變化內容;(xxx-xxx) 6.優化:在邏輯或者設計結構上進行程式碼優化或者規範化的調整;(xxx-xxx)
一、建立指令碼
1、commit-regulars
^[0-9].增加:..*;\(.*-.*\)$
^[0-9].解決:..*;\(.*-.*\)$
^[0-9].備註:..*;\(.*-.*\)$
^[0-9].優化:..*;\(.*-.*\)$
^[0-9].修改:..*;\(.*-.*\)$
^[0-9].刪除:..*;\(.*-.*\)$
這個指令碼主要為自定義的政策匹配規則
2、commit-msg
#!/bin/sh fileName=$1 message=$(<$fileName) # 提交內容的正則表示式檔名,一行一個正則 regularFileName=".git/hooks/commit-regulars" success=0 echo $message while IFS='' read -r line || [[ -n "$line" ]]; do line=$(echo $line | tr -d '\r') if [[ $message =~ $line ]]; then success=1 break fi done < $regularFileName if [ "$success" == "0" ]; then echo 你本次版本提交不符合日誌提交規範. >&2 echo 1.日誌中每一點描述都以序號做開頭如 "1." 做開頭並遞增. >&2 echo 2.日誌中不要包含全形的中文標點符號. >&2 echo 3.日誌每個描述結束以半形符號 ";" 分號做結束符. >&2 echo 4.必須在JIRA系統上建立對應的問題點,JIRA 系統上的問題點在日誌中要以問題點的編號做結尾並兩端加括. >&2 echo 請補充日誌說明資訊後再提交程式碼,例如: >&2 echo 1.增加:..功能;新增程式碼或者調整原始SDK程式碼實現某需求的過程. >&2 echo 2.修改:..功能;當某個需求功能還在繼續完善的過程. >&2 echo 3.解決:..問題;當接受到問題 BUG 反饋後進行修復的過程. >&2 echo 4.刪除:刪除某部分程式碼或資原始檔的過程. >&2 echo 5.備註:說明一個過程或者需要闡述某個階段的變化內容. >&2 echo 6.優化:在邏輯或者設計結構上進行程式碼優化或者規範化的調整. >&2 echo *******************禁止空格資料***************** >&2 exit 1 fi
此指令碼為在客戶端執行commit後進行commit的日誌格式化匹配。
將這兩個指令碼檔案放到本地專案的.git/hooks中,該專案每次提交後即可完成日誌記錄的約束。不過此方法僅適用於單專案,那麼是否可以進行一次設定,該客戶端下的所有有效呢,請看如下。
二、全域性設定commit-msg的hooks
1、建立資料夾:
mkdir -p ~/.git_template/hooks
該指令會在c盤使用者目錄下建立目錄.git_template/hooks,如果不熟悉指令的也可手工進行建立資料夾。
2、將一中的兩個指令碼檔案放入建立好的資料夾中
3、設定全域性配置
git config --global init.templatedir ~/.git_template
如上三步完成後即可在建立新的使用git管理的專案的時候自動將全域性模版拷貝至專案根目錄/.git/目錄下,如果完成如上三步後需要對已經存在對git專案使用該模版,可移動至目標專案根目錄並執行git init即可。
參考文章: