1.環境
centos6.4
2.安裝svn
yum -y install subversion
3.配置
建立版本庫目錄
mkdir /www/svndata
svnserve -d -r /www/svndata
建立一個新的Subversion項目
svnadmin create /var/www/svndata/njlrxx
配置允許使用者jiqing通路
cd /var/www/svndata/njlrxx/conf
vi svnserve.conf
anon-access=none
auth-access=write
password-db=passwd
注:修改的檔案前面不能有空格,否則啟動svn server出錯
vi passwd
[users]
#<使用者1> = <密碼1>
#<使用者2> = <密碼2>
jiqing=123456
5.用戶端連接配接
svn co svn://ip/njlrxx
使用者名:jiqing
密碼:123456
===============================================================
6.實作SVN與WEB同步,可以CO一個出來,也可以直接配在倉庫中
1)設定WEB伺服器根目錄為/var/www/webroot
2)checkout一份SVN
svn co svn://localhost/njlrxx /var/www/webroot/njlrxx
修改權限為WEB使用者
chown -R apache:apache /var/www/webroot/njlrxx
3)建立同步腳本
cd /var/www/svndata/njlrxx/hooks/
cp post-commit.tmpl post-commit
編輯post-commit,在檔案最後添加以下内容
REPOS="$1"
REV="$2"
BASEPATH=/var/www/webroot/njlrxx
WEBPATH="$BASEPATH/"
export LANG=zh_CN.UTF-8
svn update $WEBPATH --username jiqing --password 123456 --no-auth-cache --accept theirs-full
--accept : 指定自動解決沖突動作的源
('base', 'working', 'mine-conflict',
'theirs-conflict', 'mine-full', 'theirs-full')
svn resolve rain.txt --accept working
增加腳本執行權限
chmod +x post-commit
最後操作是關閉服務然再打開服務:
svn服務的關閉:
killall svnserve
svn開啟:
svnserve -d -r /var/www/svndata
SVN自動同步程式執行流程:
1、使用者送出檔案到SVN伺服器,送出操作成功後觸發post-commit腳本
2、在post-commit版本檔案中使用php_script.php執行PHP腳本
3、在PHP腳本中通過exec系統調用更新伺服器上的版本庫工作副本
4、根據更新操作結果日志,對另一個SVN版本庫進行對應的操作處理
操作TortoiseSVN時,報如下錯誤:
Command Update
Repository UUID 'xxxxxxxx' doesn't match expected
UUID 'xxxxxxxx'
Finished!
可以看到,原來Repository建立者的UUID是前者,而現在所操作的是後者的UUID。是以,目前的解決辦法是:使用相關指令更新Repository的UUID。
具體辦法如下:
1、首先檢視項目的所有者的UUID
# svnlook uuid /var/svn/repos
xxxxxxx
2、更新項目的UUID
# svnadmin setuuid /var/svn/repos xxxxxxx
3、檢視一下更新後的UUID
附:
UUID是repository建立時自動生成的一個随機數, SVN Client利用UUID判斷是否為同一個resp。一般遇到UUID不同時,需要重新checkout