BUG's Living Diary

Icon

蟲的生活日誌

Subversion and Web development

將 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: 蟲的研究心得

One Response

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

Leave a Reply

Author

參觀人數

  • 19,615 人次

Flickr 相簿

DSCN1635

More Photos