原文發表於cu:2016-05-24
參考文檔:
- http://www.tuicool.com/articles/Yv2iyu7
- http://www.centoscn.com/CentosServer/ftp/2013/1217/2244.html
- http://sxlkk.iteye.com/blog/2264819
- http://blog.csdn.net/fax5201314/article/details/38020547
svn服務器有2種運行方式:
- 獨立服務器; (例如:svn://x.x.x.x/xxx)
- 借助apache。(例如:http://x.x.x.x/xxx)
此文檔基於獨立服務器部署,不依賴apache。
svn存儲版本數據也有2種方式:
- BDB;
- FSFS。
BDB方式在服務器中斷時,有鎖住數據的可能,FSFS方式相對安全,本文檔部署FSFS模式。
一.環境
Server: CentOS-6.7-x86_64
Server IP: 172.18.11.212
Client: Win7 x86_64
二.軟件獲取
Server
Subversion官網:http://subversion.apache.org/
1.9.3版本下載:http://apache.fayea.com/subversion/subversion-1.9.3.tar.bz2
Client
TortoiseSVN官網:http://tortoisesvn.tigris.org/
1.9.3 x86_64位置版本下載:http://netix.dl.sourceforge.net/project/tortoisesvn/1.9.3/Application/TortoiseSVN-1.9.3.27038-x64-svn-1.9.3.msi
中文語言包(版本必須匹配,否則語言包不生效,客戶端設置中找不到):
三.安裝svn
1. 准備
系統檢查
#查看服務器系統是否已經安裝svn #方式1 rpm -qa | grep subversion #方式2,查看是否有執行文件 ll /usr/bin/svn* #方式3,如果有執行文件,查看版本 svnserve –version
依賴包
常規編譯包
yum install autoconf libtool gcc gcc-c++ -y
openssl(optional)
#openssl主要在客戶機上通過serf使用或在apache服務器使用。 #檢測 find / -name opensslv.h #如果找不到可以進行yum安裝或源碼安裝(略) yum install openssl openssl-devel –y
安裝之后找到opensslv.h的所在目錄,編譯svn時使用" --with-openssl="帶上路徑。
zlib(必需)
#zlib主要用作svn的二進制差異算法,算法取決於zlib壓縮。 #檢測 rpm qa | grep zlib* #如果找不到可以進行yum安裝或源碼安裝(http://zlib.net/,也可通過svn解壓后的腳本獲得) yum install zlib zlib-devel –y
編譯svn時使用" --with-zlib="帶上路徑(針對非默認路徑的源碼安裝)。
2. 安裝svn
解壓
#將下載的subversion-1.9.3.tar.bz2放置於/usr/local/src目錄, cd /usr/local/src tar -jxvf subversion-1.9.3.tar.bz2 cd subversion-1.9.3
配套依賴包
#在subversion-1.9.3目錄內有1個可執行腳本get-deps.sh,可以下載版本相關的依賴包; #執行之后subversion-1.9.3文件夾多出了apr,apr-util,zlib,serf(與客戶端通過apache服務訪問svn相關),sqlite-amalgamation等文件夾,其中apr,apr-util,zlib是subversion必需依賴包,系統中可能已安裝,但版本可能不匹配(尤其是apr,apr-util,所以使用此腳本下載的依賴包最佳)。 ./get-deps.sh
apr/apr-util
cd apr ./configure --prefix=/usr/local/apr make make install cd ../apr-util ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr make make install
編譯安裝
#不使用bdb方式,預編譯時可能會有告警 cd .. ./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --without-berkeley-db make make install
環境變量
#將svn的命令目錄加入環境變量 vim /etc/profile export PATH=/usr/local/svn/bin:$PATH source /etc/profile #或者采用軟鏈接的方式將svn的命令加入到環境變量中,如下 ln -s /usr/local/svn/bin/* /usr/bin/
驗證
#返回版本信息即成功 svnserve --version
3. 部署svn
創建版本庫
#創建倉庫根目錄 mkdir -p /svn #創建版本庫svntest,如果有多個項目可建多個版本庫 mkdir -p /svn/svntest svnadmin create /svn/svntest
版本配置庫文件
#版本庫svntest的配置文件目錄 cd /svn/svntest/conf/ vim svnserve.conf #取消general項目下如下幾行的注釋;注意:每一行的都要頂頭,不能有空格,否則報錯 #27/36/47行可以使用相對路徑(passwd/authz默認為版本庫conf下文件,svntest為版本庫svntest根目錄),也可以指定絕對路徑 19 anon-access = none #必須設置,否則所有用戶不用密碼就可以訪問 20 auth-access = write 27 password-db = passwd 36 authz-db = authz 47 realm = svntest
用戶配置文件
cd /svn/svntest/conf/ vim passwd [users] # harry = harryssecret # sally = sallyssecret #設置登錄賬號與密碼 #對用戶配置文件的修改立即生效,不需要重啟服務 testuser = testsecret
權限配置文件
#除如下修改外,默認配置可不變 cd /svn/svntest/conf/ vim authz #設置admin組,用戶testuser加入admin組,1個用戶組可含多個用戶,用逗號隔離 [groups] admin = testuser #設置admin組對版本庫svntest根目錄及以下有讀寫權限,也可以針對單個用戶設置,如 testuser = rw [svntest:/] @admin = rw #權限配置文件中的賬戶必須已在用戶配置文件中定義,對權限配置文件的修改立即生效,不需要重啟svn服務
authz文件語法
用戶組格式
[groups]
= ,
其中,1個用戶組可以包含1個或多個用戶,用戶間以逗號分隔
版本庫目錄格式
[<版本庫>:/項目/目錄]
@<用戶組名> = <權限>
<用戶名> = <權限>
其中,方框號內部分可以有多種寫法:
[/],表示根目錄及以下,根目錄在svnserve啟動時指定的,[/]表示對倉庫根目錄有設置權限;
[版本庫:/] 表示對版本庫xxx設置權限,如上文指定的svntest版本庫;
[版本庫:/項目] 表示對版本庫xxx中的某項目設置權限;
[版本庫:/項目/目錄] 表示對版本庫xxx中的某項目的某目錄設置權限;
權限主體可以是用戶組、用戶或*,用戶組在前面加@,*表示全部用戶;
權限可以是w、r、wr和空,空表示沒有任何權限
啟動svn
# -d表示以daemon方式運行; # --listen-port指定監控端口,不指定時默認是3690端口,通過端口可開啟多個svn庫; # -r指定倉庫根目錄,注意不是某版本庫根目錄,根目錄的設置與客戶端登錄地址有關聯,如果設置不當,可能會導致登錄的諸多問題 svnserve -d --listen-port 5690 -r /svn/ #驗證 ps aux | grep svn #停止svn killall svnserve
開機啟動svn
# 注意修改shell中的相關設置,如變量SVN_HOME,端口等 # 請不要刪除# chkconfig: - 85 15與# description: svn server,否則無法使用chkconfig加入服務,會提示service svn does not support chkconfig vim /etc/rc.d/init.d/svn #!/bin/bash # chkconfig: - 85 15 # description: svn server SVN_HOME=/svn if [ ! -f "/usr/local/svn/bin/svnserve" ] then echo "svnserver startup: cannot start" exit fi case "$1" in start) echo "Starting svnserve…" /usr/local/svn/bin/svnserve -d --listen-port 5690 -r $SVN_HOME echo "Finished!" ;; stop) echo "Stoping svnserve…" killall svnserve echo "Finished!" ;; restart) $0 stop $0 start ;; *) echo "Usage: svn { start | stop | restart } " exit 1 esac #賦予啟動腳本權限 chmod 755 /etc/rc.d/init.d/svn chkconfig --add svn chkconfig --level 35 svn on #也可以簡單處置,如編輯rc.local文件 vim /etc/rc.d/rc.local /usr/local/svn/bin/svnserve -d –listen-port 5690 -r /svn
iptables
#打開相應的端口,保存iptables設置 iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 5690 -j ACCEPT /etc/rc.d/init.d/iptables save
四.客戶端TortoiseSVN
安裝TortoiseSVN客戶端及語言包,訪問路徑svn://ip:port。
以下是簡單的使用教程。
數據導入
選擇本地需要導入到服務器端的文件目錄,,右鍵—>TortoiseSVN導入,如下:

輸入版本庫地址,

首次使用需要輸入用戶名/密碼,

數據檢出
選擇需要檢出的目錄,鼠標右鍵,SVN檢出 -->導出

填寫導出版本庫URL與需要導出的目錄,

更新與提交
如果版本有更新,選擇相應的目錄,右鍵-->SVN更新;
如果本地做了更改,需要上傳到服務器,選擇相應的目錄,右鍵-->SVN提交。
建議每次本地要做更新提交時,先SVN更新到服務器端最新版本,在最新版本上做本地修改再提交。

添加文件/目錄
如果在檢出目錄內新增了文件/目錄,需要先添加,再SVN提交到版本庫,如下,

如添加的文件符號變更如下,然后才能SVN提交到版本庫。

刪除文件/目錄
如果需要刪除服務器端文件/目錄,不能使用本地刪除,對刪除的文件/目錄,右鍵-->TortoiseSVN-->刪除,回到上級目錄,SVN提交。

