一、hook簡單介紹
為了方便管理員控制提交的過程 ,Subversion提供了hook機制。當特定的 事件發生時,相應的 hook會被調用,hook其實就相當於特定事件的處理函數。每個hook會得到與它所處理的事件相關的參數,根據 hook的返回值,Subversion會決定是否繼續當前的提交過程
要實際安裝一個可用的鈎子,你需要在 repos/hooks目錄下安裝一些與鈎子同名(如 start-commit或者post-commit)的可執行程序或腳本。
二、本地機器SVN自動更新
1. export方式(備份)
在使用svn客戶端時,有可能需要對某一個版本進行本地備份,比如制作成壓縮包進行發布,這時候需要從svn文件夾中提取出內容,去除.svn等隱藏的svn配置文件。最笨的方法拷貝一份出來,然后顯示隱藏文件,把所有 .svn文件夾都刪掉。在svn菜單中,可以找到export命令,這個命令可以將當前svn目錄中的內容干凈地導出到指定的目錄
例如你版本庫的svn訪問地址是http://10.30.11.12:8080/svn/project1,你想把這個版本庫下的/trunk/web文件夾發布到tomcat上,發布到tomcat的文件夾地址是d:/tomcat/opt/web,svn的管理員用戶名是abc,密碼是12345,那么這個鈎子程序應該就是:
svn export http://10.30.11.12:8080/svn/project1/trunk/web d:/tomcat/opt/web --force --username abc --password 12345 --no-auth-cache
注:
--force 是說強制覆蓋d:/tomcat/opt/web這個文件夾,避免這個文件夾不為空時報錯
--username abc --password 12345 是自動將用戶名和密碼作為參數傳送進去
--no-auth-cache 是說不緩存用戶名和密碼,這是出於安全考慮
2.update方式
修改hooks/post-commit
export LANG=en_US.UTF-8
SVN=/usr/bin/svn
STATIC_DIR=/web/root/wwwdeng #注意權限問題
$SVN update $STATIC_DIR --username deng --password 123456 --no-auth-cache
#必須加上--no-auth-cache不然會報錯!!
默認使用的shell類型是sh,最好改成bash,sh是bash的子集,centos中sh其實就是軟鏈接到bash
3.update和export比較
update會生成一個隱藏.svn文件夾,這個文件夾是我們不需要的,當然了,如果整個發布的內容很多的話,建議還是用update,而不用export,因為update只更新有變化的部分,而export將重新導出所有內容,網絡消耗比update大。
三、svn實現遠程機器自動更新
首先實現A機器通過ssh無密碼登陸B機器, 修改A機器的post-commit文件
/usr/bin/ssh -l root 192.168.127.183 "/bin/bash /home/www/svnup.sh"
然后在B機器的/home/www/目錄創建svnup.sh可執行文件
/usr/bin/svn update /web/root/code
版本庫有提交請求的時候自動會執行post-commit腳本,post-commit腳本通過ssh讓遠程機器執行shell腳本自動更新svn。
附注:
@echo off並不是DOS程序中的,
而是DOS批處理中的。
當年的DOS,所有操作都用鍵盤命令來完成,
當你每次都要輸入相同的命令時,
可以把這么多命令存為一個批處理,
從此以后,只要運行這個批處理,
就相當於打了幾行、幾十行命令。
DOS在運行批處理時,
會依次執行批處理中的每條命令,
並且會在顯示器上顯示,
如果你不想讓它們顯示,
可以加一個“echo off”
當然,“echo off”也是命令,
它本身也會顯示,
如果連這條也不顯示,
就在前面加個“@”。
說了這么多,
我覺得非常詳細了,
可能你還是不懂。
沒有經過DOS時代的人,
想法跟我們是有區別的。