首先要詳細學SVN的話:
SVN BOOK 中文
這本書是一定要先讀的。
鈎子的目的
我們面臨這樣一個問題,就是我們在本地寫的代碼是個網站,而在修改完之後,送出之後立即在伺服器的網址上能看到修改的内容。但是發現伺服器上的倉庫存儲的并不是代碼,而是一些配置檔案和DB資料。
這個時候就需要鈎子了,就是在伺服器上重新布置一份代碼,讓每次在本地送出的時候,都可以更新這份代碼。這樣子就可以保證明時更新了。
鈎子文檔
鈎子是通過版本庫事件觸發,例如新版本的建立或一個未版本化屬性的修改。一些鈎子(叫做“pre hooks”)在事件發生前運作,可以用來報告發生了什麼以及防止它發生。還有一些鈎子(“post hooks”)在版本庫事件之後發生,隻是用來報告。每個鈎子能夠獲得事件的足夠資訊,例如提出的(或完成的)版本庫修改細節,還有觸發事件的使用者名。
預設情況下,hooks子目錄中包含各種版本庫鈎子模闆。
$ ls repos/hooks/
post-commit.tmpl post-unlock.tmpl pre-revprop-change.tmpl
post-lock.tmpl pre-commit.tmpl pre-unlock.tmpl
post-revprop-change.tmpl pre-lock.tmpl start-commit.tmpl
Subversion會試圖以目前通路版本庫的使用者身份執行鈎子。通常,對版本庫的通路總是通過Apache HTTP伺服器和mod_dav_svn進行,是以,執行鈎子的使用者就是運作Apache的使用者。鈎子本身需要具有作業系統級的通路許可,使用者可以運作它。另外,其它被鈎子直接或間接使用的檔案或程式(包括Subversion版本庫本身)也要被同一個使用者通路。換句話說,要注意潛在的通路控制問題,它可能會讓你的鈎子無法按照你的目的順利執行。
鈎子的使用
複制一份
post-commit.tmpl
為
post-commit
,并修改:
post-commit
内容,為:
REPOS="$1"
REV="$2"
TXN_NAME="$3"
WEB=/home/alps/judianer #這個地方寫你準備放代碼的路徑
export hljs-number">8
svn update $WEB --username alps --password chen #alps是svn的使用者名,chen是svn密碼,自己換成自己的。
然後現在去你填寫的WEB那裡的上一層目錄,也就是
/home/alps
然後在這裡:
這樣弄來儲存一份代碼,然後每次你本地送出的時候,這個檔案夾就會執行一次svn update了。