相 信很多開發人員和我一樣,在工作之餘還會管理個人網站,和網友們分享自己的經驗和代碼。應該大部分人都是租用的虛擬機器主機,這樣平時在公司那一套使用SVN 提交代碼的方式就不管用了,每次更新程式,都要先整理一份修改記錄,然後依次用FTP上傳,麻煩耗時不說,還會經常遺漏檔案,造成不必要的麻煩。
想 要讓線上代碼和本地開發環境保持同步,方法也很多,最簡單的可以利用CuteFtp,WinScp的檔案夾監視功能,當被監視的檔案夾內有修改動作,就會 自動觸發程式提交代碼到伺服器。但這樣也有個弊端,在本地調試的修改也會帶上線,雖然是方便了,但可能造成更大的問題。
如 圖所示,當開發人員在本地開發並調試後,提交代碼到本機SVN伺服器,觸發post-commit鉤子,調用post-commit.bat,(由於對 bat的文法不熟悉,在這個架構中,我用php代替bat,post-commit.bat僅做了在命令列下調用post-commit.php並傳 參),然後然後進行檔案的同步處理。
大致流程如下:
- 開發人員提交代碼到SVN伺服器
- 提交完成後,自動調用post-commit鉤子
- 鉤子調用php指令碼並傳遞三個參數:代碼倉庫路徑,目前的版本號,設定檔名
- php指令碼通過傳遞過來的參數取得並分析目前的版本的更新日誌
- 根據不同的情況(新增、修改、刪除、重名民)來同步檔案
post-commit.bat代碼如下:
1
2 set PATH=D:\Program Files\WebServer\PHP5.2.6;%PATH%
php "F:\wwwroot\site\raychou\labs\php-svn-hooks\post-commit.php" "%1" %2 "config/raychou.php" 1>&2
除post-commit預設的%1和%2兩個參數外,這裡我還傳了第三個參數”config/raychou.php”,這個參數是傳遞給PHP指令碼,讓其去讀取指定的設定檔,這個設定檔是在同步過程中需要用到的一些設定,例如SVN工作目錄,FTP帳號等設定。
php在接收到hooks傳遞過來的參數後,讀取設定檔,串連本地SVN版本庫,取得並分析本地更新日誌,串連FTP伺服器,開始同步檔案。
關於SVN Hooks以及post-commit的參數傳遞,請參考這裡http://www.subversion.org.cn/svnbook/1.4/svnbook.html#svn.ref.reposhooks
php-svn-hooks php-ftp-client php-svn-client
註:本文僅針對沒有條件在主機上安裝SVN伺服器的情況,例如使用虛擬機器主機的開發人員。
轉載自:http://hi.baidu.com/omyss/item/e524bfd7d5fc98cd1a72b4ee