將 Subversion 用於網站開發勢必遇到的一個問題
在將所有程式交由 Subversion 做版本控制時, 也必須從 Subversion 取出一份複本
給 HTTP Server 做展示用, 而問題是
如何在更新 Subversion 的同時也更新展示用的複本?
Subversion 提供了 Hook 的方式, 以事件的方式在 送交 Commit 的前後執行額外的 Script
詳情參考: http://twpug.net/docs/Subversion/#svn-ch-5-sect-2.1
我們便可利用這個方式在更新版本的同時, 也更新伺服器上的複本供網頁伺服器展示
以下使用 FreeBSD 6.2 為平台做為範例:
每個 SVN 的建立都擁有一個檔案庫 Respository 儲存於一目錄底下
在此處使用 /usr/home/svn/proj/
而 Hook scripts 則存在於該目錄底下的 hook 目錄中
如 /usr/home/svn/proj/hook
在事前, 系統內已有各事件處理的範例, 如下:
-rw-r–r– 1 www www 2015 Jan 25 21:20 post-commit.tmpl
-rw-r–r– 1 www www 1638 Jan 25 21:20 post-lock.tmpl
-rw-r–r– 1 www www 2255 Jan 25 21:20 post-revprop-change.tmpl
-rw-r–r– 1 www www 1567 Jan 25 21:20 post-unlock.tmpl
-rw-r–r– 1 www www 2940 Jan 25 21:20 pre-commit.tmpl
-rw-r–r– 1 www www 2044 Jan 25 21:20 pre-lock.tmpl
-rw-r–r– 1 www www 2764 Jan 25 21:20 pre-revprop-change.tmpl
-rw-r–r– 1 www www 1985 Jan 25 21:20 pre-unlock.tmpl
-rw-r–r– 1 www www 2137 Jan 25 21:20 start-commit.tmpl
每個事件觸發的檔案在此就不贅述
從這些檔案中我們找到 post-commit.tmpl 是當送交 Commit 完成後會執行的 Script
只需要按照檔案內的註解, 將 post-commit.tmpl 重新命名為 post-commit 並 chmod 755 使其擁有執行權限
接下來要做的事情可想而知, 即是將更新複本的指令放入 post-commit 中
post-commit 的檔案內容為:
#!/bin/sh
# 註解 (略)
/usr/local/bin/svn update /home/projects/proj/www/svn –username=xxx–password=yyy> /usr/home/svn/update_log&
此處有二點需要注意的地方:
1. 務必在指令內加上使用者帳號及密碼的參數, 若您有權限控管, 無此參數是無法更新的
2. 更新的動作視執行 SVN 的程式, 可能為 apache 可能為 svn 但請務必使其擁有權限讀寫複本之目錄
以上即大功告成, 可以試著更新 SVN 內的檔案, 並檢查是否已順便更新至伺服器端的複本
若無, 可以檢查上述指令中的 /usr/home/svn/update_log 查看是否發生任何問題
Filed under: 蟲的研究心得

[...] Subversion post-commit 的解說以及注意事項 [...]