SVN 服務與版本庫構建

 
step 1 建立版本庫
主目錄 E:\rick\SDE\repository
在repository下建立項目的版本庫目錄yogurt,採用: svnadmin create E:\rick\SDE\repository\yogurt  or 在建好的yogurt 目錄右鍵TortiseSVN->Create repository here
完成版本庫的建立

step 2 配置
修改E:\rick\SDE\repository\yogurt\conf
1)將svnserve.conf文件中的# password-db = passwd及# authz-db = authz兩行前的#號及空格去掉,並保存文件;
 
2)在passwd文件中添加用戶名及密碼,如下例所示:
[users]
rick = rick
 
3)修改authz文件,添加用戶組對資源庫目錄的訪問權限及用戶級的成員。示例如下:
 
[groups]
group = rick
[/]
@group01 = rw

step 3 創建 svn 服務
sc create svnservice binpath= "\"E:\rick\SDE\subversion\bin\svnserve.exe\" --service -r E:\rick\SDE\repository" displayname= "SVNService" depend= Tcpip start= auto
啓動服務: net start svnservice

說明與注意事項:
a.c:\Subversion爲SVN服務端安裝目錄;
b.D:\repository爲各項目資源版本庫的根目錄;(即在此目錄下可以建立多個項目的版本庫,如testproject01等。)
c.start= auto表示這個服務隨系統自動啓動;
d.”=”前不能有空格,面後面必須有空格;
e.運行”net start svnservice”啓動這個服務,”net stop svnservice”停止這個服務。
f.刪除服務使用sc delete svnservice命令
 
自動更新的配置

開發中經常要在更新SVN的同時要更新WEB服務器。可以用過Subversion的鉤子(Hook)來實現。
以下是Windows操作系統下的配置:
在SVN庫的hooks目錄下面新建post-commit.bat文件,用記事本打開,然後寫入如下的代碼:

@echo off
SET REPOS=%1
SET REV=%2

SET DIR=%REPOS%/hooks
SET PATH=%PATH%;

SET WORKING_COPY=D:\Websites\Latisse
svn update %WORKING_COPY% –username user –password pwd

此處的D:\Websites\Latisse即是WEB網站的目錄(當然得先建好這個目錄,並且從svn服務器上籤出相應的項目)。
這樣在用戶提交完後,便會自動更新到WEB服務器上。

需要注意到問題是:
1.不要在WEB網站文件夾下作修改或其它操作,防止出現文件夾被鎖。無法更新。

2.在這裏我明確寫明瞭用戶名(user),密碼(pwd)。在我設置時發現,如果沒有設置的話會出現錯誤,在直接運行這個bat文件時是能正常執行的,但是,在Subversion提交後卻不能正常運行。並且可以看到服務器進程中會出現cmd,svn兩個進程,並且不會自己結束,而用戶在提交內容到服務器後,會出現客戶端無法正常返回的問題。

3.如果運行不能正常,可以通過下面的方法看到出錯信息:
將剛纔的post-commit.bat改名爲post-commit-run.bat,然後再建一個post-commit.bat的文件,裏面寫入如下的代碼:

call %~dp0post-commit-run.bat %* > %1/hooks/post-commit.log 2>&1
這樣運行結果就會被寫入到post-commit.log文件中,如果出錯,也可以找到出錯的原因。

step 4 checkout
SVN Checkout -> svn://localhost/yogurt


SVN
安裝方式:yum install (源碼安裝容易產生版本兼容的問題)
本地IP: B
1 安裝
採用 yum install subversion mod_dav_svn

檢查已安裝版本
#檢查是否安裝了低版本的SVN
rpm -qa subversion

#卸載舊版本SVN
yum remove subversion

確認已安裝了svn模塊
 cd /etc/httpd/modules
 # ls | grep svn
mod_authz_svn.so
mod_dav_svn.so

驗證安裝 svn --version
 
下列版本庫後端(FS) 模塊可用:

* fs_base : 模塊只能操作BDB版本庫。
* fs_fs : 模塊與文本文件(FSFS)版本庫一起工作。
Cyrus SASL 認證可用。
注:./configure --prefix=/usr/local/svn 
make && make install

2 配置
創建代碼庫
mkdir -p /opt/svn/repository  # p 代碼若沒有父目錄則創建
svnadmin create /opt/svn/repository/mygame
執行上面的命令後,自動建立repository庫,查看/opt/svn/repository/mygame 文件夾發現包含了conf, db,format,hooks, locks, README.txt等文件,說明一個SVN庫已經建立。

配置代碼庫
進入上面生成的文件夾conf下,進行配置
cd /opt/svn/repository/mygame/conf

用戶密碼passwd配置
cd /opt/svn/repository/mygame/conf
vi passwd
修改passwd爲以下內容:
[users]
# harry = harryssecret
# sally = sallyssecret
rickzheng=123456#
權限控制authz配置
# vi authz
目的是設置哪些用戶可以訪問哪些目錄,向authz文件追加以下內容:
#設置[/]代表根目錄下所有的資源
[/]
rickzheng=rw
服務svnserve.conf配置 : vi svnserve.conf

追加以下內容:
[general]
#匿名訪問的權限,可以是read,write,none,默認爲read
anon-access=none
#使授權用戶有寫權限
auth-access=write
#密碼數據庫的路徑
password-db=passwd
#訪問控制文件
authz-db=authz
#認證命名空間,subversion會在認證提示裏顯示,並且作爲憑證緩存的關鍵字
realm=/opt/svn/repository
配置防火牆端口
vi /etc/sysconfig/iptables
添加以下內容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
保存後重啓防火牆
service iptables restart

啓動SVN
svnserve -d -r /opt/svn/repository

查看SVN進程
ps -ef|grep svn|grep -v grep
root     12538     1  0 14:40 ?        00:00:00 svnserve -d -r /opt/svn/repository

檢測SVN 端口
netstat -ln |grep 3690
tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN

停止重啓SVN
 killall svnserve    #停止
 svnserve -d -r /opt/svn/repository   #啓動

測試
SVN服務已經啓動,使用客戶端測試連接。
客戶端連接地址:svn://B
用戶名/密碼: rickzheng/123456
測試創建文件夾等操作。

3 設置 hooks
3.1 checkout 副本
mkdir /www/mygame 
cd /www/app 執行 svn checkout svn://B/mygame or svn://B/mygame new_app{代表重命名}  #這裏會提示是否保存密碼,若保存則post-commit可不加用戶名密碼
3.2 在 /opt/svn/repository/hooks 新建 post-commit(cp post-commit.tmpl post-commit) 文件 【鉤子腳本】
內容如下:
#!/bin/sh
export LANG=zh_CN.GBK # 注意這裏的語言編碼
web=/www/app
svn update $web –username rickzheng –password 123456 #
增加可執行權限 chmod 777 post-commit

謝謝樓主詳細的配置教程。
我這裏的環境是CentOS6.4,按樓主的方法配置後,本機啓動svn正常,客戶端無法訪問。
檢查後發現客戶端使用:
telnet [ip] 3690
無法連接,應該是防火牆問題。
刪掉之前在防火牆中的加的配置:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
重新按以下方法設置防火牆:
/sbin/iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
/etc/rc.d/init.d/iptables save
配置後查看:
/etc/init.d/iptables status
客服端telnet成功,svn也可以訪問了。
find . -type d -name ".svn"|xargs rm -rf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章