所謂hooks,能夠相似理解Linux內核Netfilter框架的hook點和hook函數的概念。當用戶在維護代碼的過程當中,其執行的相關動做正好觸發了相關hook點,就會去執行對應hook點的腳本。
SVN版本庫目錄下有hooks目錄,裏面有不少.tmpl的文件。這些文件用以定義某些動做觸發的 hook腳本。默認狀態下,這些腳本的後綴都是.tmpl,是沒有起做用的。至關於Netfilter的各個hook點沒有註冊hook函數。因此,當用戶執行相關維護代碼動做的時候,也不會觸發hook腳本。所以,在默認狀態下,用戶提交代碼的時候,不用添加註釋信息也會被版本看所接受。並且,用戶想修改本身的註釋時,會獲得服務器拒絕的相關提示信息(本人搭建的svn server是這樣的默認情形)。服務器
1. 強制添加註釋信息
用戶提交代碼的動做,對應的是pre-commit。所以,能夠修改pre-commit.tmpl文件。
文件名修改成pre-commit, Windows下能夠修改成pre-commit.bat。這樣可讓系統知道該文件時可執行文件。
將文件中如下幾行內容註釋掉, 前面添加'#'框架
$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" > /dev/null || exit 1 commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1
並在此位置添加以下幾行:svn
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c` if [ "$LOGMSG" -lt 5 ];#要求註釋不能少於5個字符(數字和字母),您可自定義 then echo -e "nLog message cann't be empty! you must input more than 5 chars as comment!." 1>&2 exit 1 fi
保存,退出。
給pre-commit添加可執行權限:
chmod +x pre-commit
通過該設置,用戶提交代碼時註釋信息小於5個字符將會獲得警告,而且代碼不會被提交到版本。函數
2. 容許用戶修改註釋信息spa
用戶修改註釋信息的動做,對應的是pre-revprop-change. 將hooks/下pre-revprop-change.tmpl
改名爲pre-revprop-change。一般該文件包含的功能就是容許用戶修改註釋信息,所以只要將該文件加上可執行權限便可:
#chmod +x pre-revprop-changecode
默認文件內容以下:server
REPOS="$1" REV="$2" USER="$3" PROPNAME="$4" ACTION="$5" if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi echo "Changing revision properties other than svn:log is prohibited" >&2 exit 1