SVN在團隊開發中使用非常普遍,是一個很友善的版本控制系統。
如果要是能将SVN伺服器上的資料自動釋出到Web伺服器,那将是整個項目開發、測試更加便捷。利用SVN的hook功能就能實作将SVN伺服器上的資料同步到Web伺服器。
思路:
找到SVN Server中的倉庫(Repositories)檔案夾的位置,在相應的項目檔案夾中找到hooks檔案夾。在該檔案夾中添加一個post-commit檔案;當有commit動作發生時(送出到SVN Server時)就會執行這個post-commit檔案,在該檔案實作資料的複制。
1.建立web目錄(已有目錄則略過)
cd /var
mkdir www
chmod 777 www
2.檢出副本到/var/www
svn co file:///var/svn/foo
此時web目錄是SVN版本庫的一個工作副本
3.增加hooks(鈎子)檔案
在/var/svn/foo/hooks/目錄中
# start-commit 送出前觸發事務
# pre-commit 送出完成前觸發事務
# post-commit 送出完成時觸發事務
# pre-revprop-change 版本屬性修改前觸發事務
# post-revprop-change 版本屬性修改後觸發事務
我們這裡隻需要修改post-commit檔案:
cp post-commit.tmpl post-commit
編輯該檔案
#!/bin/sh
# 配置庫位址
REPOS="$1"
REV="$2"
# WEB目錄
BASEPATH=/var/www
WEBPATH="$BASEPATH/"
# 避免中文資訊亂碼
export LANG=zh_CN.UTF-8
# 可以配合svnlook指令更新指定目錄
svn update $WEBPATH --username user1 --password password1 --no-auth-cache
儲存後需要修改post-commit檔案權限為755,否則SVN無法調用執行
chmod 755 post-commit
裡面原有的代碼全部注釋掉.這裡可以執行shell指令,每次commit完成後都會調用此檔案。
說明:
1、#!/bin/sh 說明是執行shell指令
2、export LANG=zh_CN.UTF-8 是為了解決svn post commit 中文亂碼。
如果你是GBK編碼可能會提示:Error output could not be translated from the native locale to UTF-8
這是用戶端和伺服器編碼的問題,預設是utf-8,可嘗試設定export LANG=zh_CN.GBK或者export LANG=en_US.UTF-8
3、svn update –username 你版本庫的使用者名 –password 使用者名的密碼
svn://你的IP位址:端口/repos/project /web/project