svn鈎子(hooks)


首先你需要搭建出自己的svn環境出來,並能成功導入導出,並且了解svn,這是看這篇文章的前提....  

     出於公司開發部需要svn同步更新服務器代碼,需要用到svn鈎子(hooks)技術,以前從來沒聽過,沒辦法只能google了,google半天再一次認同了一個道理:天下文章一大抄啊,東拼西湊終於算是完成了(為啥說算是呢?svn太強大了我所做的只是一點點),不多說了,上例子:

我們公司的部署很簡單(svn服務和web服務在同一台主機上):

開發 ----- svn(存儲)---- 線上服務器

以前是這樣(沒有用到hooks時):

開發部commit一個文件,線上服務的web文檔並不同步,而是需要在svn服務上執行

svn update命令后才能同步。

現在是這樣(用到hooks后):

開發部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目錄,前面的圖里面出現過):


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM