首先你須要搭建出本身的svn環境出來,並能成功導入導出,而且瞭解svn,這是看這篇文章的前提.... web
出於公司開發部須要svn同步更新服務器代碼,須要用到svn鉤子(hooks)技術,之前歷來沒聽過,沒辦法只能google了,google半天再一次認同了一個道理:天下文章一大抄啊,東拼西湊終於算是完成了(爲啥說算是呢?svn太強大了我所作的只是一點點),很少說了,上例子:shell
咱們公司的部署很簡單(svn服務和web服務在同一臺主機上):服務器
開發 ----- svn(存儲)---- 線上服務器svn
之前是這樣(沒有用到hooks時):post
開發部commit一個文件,線上服務的web文檔並不一樣步,而是須要在svn服務上執行測試
svn update命令後才能同步。網站
如今是這樣(用到hooks後):google
開發部commit一個文件,線上服務(web目錄)同步數據,不須要svn update命令了,這樣就減小了中間的一個小繁瑣,別看這只是一個小動做可是省了一大麻煩(對於web開發工程師來講尤爲這樣,你想啊,代碼常常改,還得常常svn update,老是一件事來回來回,煩不煩啊,是吧!)開發
咱們須要同步的網站目錄是(固然以前在svn服務器上已經存有assets目錄文件了):文檔
這樣就先在webdir目錄下創建一個assets目錄(記得切換到webdir目錄下),並運行
運行完這條命令後在webdir下面就檢出了svn服務器上的assets目錄了(裏面有網站文件),這樣作就至關於把web目錄作成客戶端目錄了;
那麼怎麼利用hooks實現數據同步呢?接下來
看到了綠色文件了嗎?!這裏面其實就是一個shell腳本:
其中的DIR變量存着須要同步的目錄,利用svn update命令加上用戶名、密碼就能同步了(我作的也就只能這麼簡單,莫怪兄弟啊!),主要看上幅圖,有不少.tmpl結尾的文件,這些就是hooks模板了,post-commit這個文件名不要更改(須要給它執行權限)
通過這幾步後,不須要手動執行這個post-commit腳本就能夠完成開發部所須要的要求了!
爲何這樣呢?套用網上的話(我也抄了,sorry啊!):
post-commit
在提交完成,成功建立版本以後執行該鉤子,提交已經完成,不可更改,所以本腳本的返回值被忽略。
post-lock
對文件進行加鎖操做以後執行該腳本
post-revprop-change
在修改 revision 屬性以後,執行該腳本。由於修改稿已經完成,不可更改,所以本腳本的返回值被忽略(不過實際上的實現彷佛是該腳本的正確執行與否影響屬性修改)
post-unlock
對文件進行解鎖操做以後執行該腳本
pre-commit
在 Subversion transaction 完畢以後,在提交以前,執行該腳本
pre-lock
對文件進行加鎖操做以前執行該腳本
pre-revprop-change
在修改 revision 屬性以前,執行該腳本
pre-unlock
對文件進行解鎖操做以前執行該腳本
start-commit
在客戶端尚未向服務器提交數據以前,即尚未創建 Subversion transaction(縮寫爲 txn) 以前,執行執行該腳本
具體到咱們的應用場景,咱們要實現一個同步的測試服務器,咱們只須要在一個用戶執行完畢一個commit提交操做以後,讓鉤子程序去自動更新測試服務器的文件便可!
附上我所作的svn目錄介紹:
192.168.1.20就是咱們公司內部服務器了(svn+web),svn的根目錄就是svndate(svndate就是版本目錄了,直接用svn客戶端訪問192.168.1.20就行)
他的auth文件是(這樣就能看出來svndate就是根目錄了,注意document目錄,前面的圖裏面出現過):