天天看點

linux下SVN的搭建

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