svn鉤子(hooks)

首先你須要搭建出本身的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目錄,前面的圖裏面出現過):

相關文章
相關標籤/搜索