1. 程式人生 > >Git設定全域性hooks規範化客戶端提交日誌記錄

Git設定全域性hooks規範化客戶端提交日誌記錄

背景:

        專案由於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即可。

參考文章: