一、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時代的人,
想法跟我們是有差別的。