svn鉤子的使用案例
我在這一篇博文中提到,svn鉤子指令碼是svn非常實用重要的功能,在工作中,會經常需要用到svn鉤子指令碼以實現除了svn自帶功能之外的附加功能,那麼這一篇博文,我們就舉例演示一下,svn鉤子是用來做什麼的,以及怎麼用。
svn鉤子的功能:
svn鉤子是乙個指令碼,它的具體寫法和linux作業系統中shell指令碼的寫法並沒有什麼不同,通俗來說,svn鉤子的功能就是當某種版本庫事件(刪除檔案、上傳檔案、修改檔名稱等等)被觸發,以指令碼定義的方式繼續該事件的執行。
鉤子的型別:
常用的鉤子指令碼
鉤子指令碼說明
post-commit在提交完成成功建立版本之後執行該鉤子,提交已經完成,不可更改,本指令碼的返回值被忽略,提交完成時觸發事件
pre-commit提交完成前觸發執行該指令碼
start-commit在客戶端還沒有向伺服器提交資料之前,即還沒有建立subversion transaction(縮寫為txn)之前,執行該指令碼(提交前觸發事務)
非常用的鉤子指令碼
鉤子指令碼說明
pre-revprop-change在修改revision屬性之前,執行該指令碼
post-revprop-change在修改revision屬性之後,執行該指令碼,因為修改稿已經完成,不可更改,因此本指令碼的返回值被忽略(不過實際上的實現似乎是該指令碼的正確執行與否影響屬性修改)
pre-unlock對檔案進行解鎖操作之前執行指令碼
post-unlock對檔案進行解鎖操作之後執行指令碼
pre-lock對檔案進行加鎖操作之前執行指令碼
post-lock對檔案進行教唆操作之後執行指令碼
注意事項:
在使用svn鉤子的時候,必須要在鉤子指令碼中設定好環境變數和命令的絕對路徑,因為svn是在乙個沒有任何環境變數的環境中執行的,甚至都沒有$path這個變數。
下面通過兩個小實驗來演示svn鉤子的功能,搭建過程可以看我的這篇博文
hooks一般放置在如下目錄,有許多的模板
第乙個鉤子:自動同步專案庫檔案到另外一台主機
[root@svn-server data]# svn co svn: /data
寫乙個鉤子指令碼
[root@svn-server hooks]# cat post-commit
#!/bin/bash
repos="$1"
rev="$2"
export lc_ctype="en_us.utf-8"
export lc_all=
logpath="/var/log"
[ ! -d $ ] && mkdir $ -p
svn=/usr/bin/svn
$svn update --username lhx --password 1 /data/
if [ $? -eq 0 ]
then
/usr/bin/rsync -az --delete /data/ [email protected]:/tmp/
fi賦予執行許可權
[root@svn-server hooks]# chmod +x post-commit
配置免密碼認證
[root@svn-server hooks]# ssh-keygen
[root@svn-server hooks]# [email protected]
上傳乙個測試檔案測試
如果指令碼有報錯會直接在svn軟體上顯示出來
在client上驗證是否已經同步檔案
第二個鉤子:限制檔案大小以及檔案的型別,上傳需要輸入備註
[root@svn-server hooks]# vim pre-commit
#!/bin/bash
repos="$1"
txn="$2"
max_size=10240000
filter='\.(zip|rar|o|obj|tar|gz)$'
svnlook=/usr/bin/svnlook
#logmsg=`$svnlook log -t "$txn""$repos" |grep "[a-za-z0-9]" | wc -c`
logmsg=`$svnlook log -t "$txn""$repos" | wc -c`
if [ "$logmsg" -lt 9 ]
then
echo -e"error:can not be empty,you must enter at least 8 characters"1>&2
exit 1
fifiles=$($svnlook changed -t $txn $repos |awk '')
for f in $files
do#check file type
if echo $f|tr a-z a-z|grep -eq $filter
then
echo"file $f is not allow ($filter) file" >&2
exit 1
fi#check file size
filesize=$($svnlook cat -t $txn $repos $f|wc -c)
if [ "$filesize" -gt "$max_size" ]
then
echo"file $f is too large(must <=$max_size)" >&2
exit 1
fidone
#all checks passed,so allow commit
exit 0
賦予執行許可權[root@svn-server hooks]# chmod +x pre-commit
測試一開始沒有輸入備註
輸入備註之後提示不允許的檔案型別
更改檔案型別並且輸入備註,提示大小超出限制
如有紕漏,歡迎指正。
SVN鉤子的配置使用
在安裝svn後每次手動更新專案太麻煩,這個時候用鉤子是乙個很不錯的選擇,它可以在你本地提交後自動更新 到線上專案裡!具體配置是 以版本庫在 svn project 為例 1.進入庫中的hooks目錄,cd svn project hooks 進入後看到以下檔案 2.copy或者新建乙個post co...
svn 鉤子檔案報錯
官網 給伺服器裝上svn之後,並編寫鉤子檔案,打算測試一下,是否能夠自動更新,svn客戶端報錯 attention your password for authentication realm balabalabla 大概的意思就是,只能吧密碼明文儲存,直接操作的話,咱們只要直接選擇yes就可以了,...
LNMP環境SVN鉤子指令碼的使用
在做版本的時候,需要svn做一些自動化的事情,比如提交前自動更新 提交一些檔案後關聯著提交另一些。所以需要寫一點自動化指令碼。官方說法 鉤子是通過版本庫事件觸發,例如新版本的建立或乙個未版本化屬性的修改。一些鉤子 叫做 pre hooks 在事件發生前執行,可以用來報告發生了什麼以及防止它發生。還有...