1. 前言php
Subversion(簡稱svn)是跨平臺的開源版本控制系統,是cvs的接班人,目前絕大多數開源軟件都使用svn做爲代碼版本管理軟件。Subversion支持linux和windows,但較多安裝在linux下。html
svn服務器有兩種運行方式:獨立服務器和藉助於apache。 svn:// http://linux
svn客戶端:tortoisesvnweb
svn的基本工做思路: 在一臺服務器上創建一個源代碼庫,庫裏能夠存放許多不一樣項目的源程序。有源代碼庫管理員統一管理這些源程序。每一個用戶在使用源代碼庫以前,首先要把源代碼庫裏德項目文件下載到本地,而後開發人員能夠在本地修改,左後用svn命令進行提交,遊源代碼庫統一管理修改。算法
版本控制解決了:代碼管理混亂、解決代碼衝突困難、在代碼整合期間引起bug、沒法對代碼的擁有者進行權限控制、項目不一樣版本的發佈困難apache
配置subversion:windows
dav目錄:是提供apache與mod_dav_svn使用的目錄,讓他們存儲內部數據bash
db目錄:就是全部版本控制的數據存放文件服務器
hooks目錄:放置hook腳本文件的目錄jsp
locks目錄:用來放置subversion見艱苦鎖定數據的目錄,用來追蹤存取文件庫的客戶端
format文件:是一個文本文件,裏面只放了一個整數。表示當前文件庫配置的版本號
conf目錄:是這個倉庫的配置文件(倉庫的用戶訪問帳號.權限等)
2. 安裝
cat /etc/redhat-release #查看系統版本 CentOS release 5.8 (Final) uname -r #查看內核 2.6.18-308.el5 yum install httpd httpd-devel subversion mod_dav_svn -y #yum安裝apache、svn,mod_dav_svn是apache+svn結合的模塊
3. 配置
3.1 查看/etc/httpd/conf/httpd.conf中,apache默認啓用用戶是否被註釋,若是註釋,取消註釋
sed -i 's/^#User apache/User apache/g' /etc/httpd/conf/httpd.conf sed -i 's/^#Group apache/Group apache/g' /etc/httpd/conf/httpd.conf
3.2 Apache服務器配置SVN訪問的目錄
cat >> /etc/httpd/conf.d/subversion.conf << EOF #####by-hooper-2013-08-28##### <Location /svn/> DAV svn SVNParentPath /opt/svn/ AuthType Basic AuthName "hooper's svn" AuthUserFile /etc/httpd/passwd.conf AuthzSVNAccessFile /opt/svn/authz Require valid-user </Location> #####by-hooper-2013-08-28##### EOF
svn的apache配置文件會自動生成/etc/httpd/conf.d/subversion.conf
配置文件的說明以下:
<Location /svn/> #在url或svn客戶端上指定的訪問路徑 DAV svn #聲明svn SVNParentPath /opt/svn/ #svn的根目錄 AuthType Basic #基礎密碼認證 AuthName "hooper's svn" #網站說明文字 AuthUserFile /etc/httpd/passwd.conf #apache登錄密碼認證文件 AuthzSVNAccessFile /opt/svn/authz #svn目錄權限 Require valid-user </Location>
3.3 建立svn目錄及項目庫並受權apache用戶
mkdir /opt/svn svnadmin create /opt/svn/hooper chown -R apache:apache /opt/svn/hooper
3.4 建立經過apache訪問svn的帳戶和密碼
htpasswd -cm /etc/httpd/passwd.conf hooper New password: Re-type new password: Adding password for user hooper htpasswd /etc/httpd/passwd.conf nil New password: Re-type new password: Adding password for user nil htpasswd /etc/httpd/passwd.conf hj New password: Re-type new password: Adding password for user hj # htpasswd -c 建立一個加密文件 # htpasswd -m 默認apache htpassswd命令採用MD5算法對密碼進行加密
3.5 配置svn帳戶訪問庫權限
cat >> /opt/svn/authz << EOF #####by-hooper-2013-08-28##### [groups] admin = hooper,hj user = nil [hooper:/] @admin = rw @user = r [/] #####by-hooper-2013-08-28##### EOF
配置文件說明以下:
[groups] #羣組設置 admin = hooper,hj #admin組中的用戶,多個用戶用「,」隔開 user = nil #user組中的用戶 [hooper:/] #hooper項目庫 @admin = rw #admin組對hooper這個庫有讀寫權限 @user = r #user組對hooper這個庫有讀的權限 [/] #PS:「* = r 表示對全部的用戶都具備讀權限」
3.6 啓動svn及apache
svnserve -d -r /opt/svn/ apachectl -t #Syntax OK apachectl start
3.7 檢查進程及端口
ps -ef|egrep "svn|httpd"|grep -v grep netstat -ltnp|egrep "80|3690"
至此apache+svn部署完成。
4. 在客戶端查看時候部署完成
4.1 在客戶端安裝tortoisesvn(安裝過程略過)
URL:http://tortoisesvn.net/downloads.html
4.2 設置
新建一個文件夾,右鍵SVN checkout
在URL裏輸入:http://192.168.10.166/svn/hooper 點擊「OK」
輸入用戶及密碼:hooper,點擊「ok」
顯示登陸成功
這樣就可使用了
5. SVN管理命令
5.1 svn命令
導入數據到版本庫
# svnadmin create /data/svndata/pro1
# svn import /www/shop file:///data/svndata/pro1 -m 「import」
查看版本庫下的內容
# svn list file:///data/svndata/pro1
注:在導入倉庫後,原來的目錄樹並無轉化成一個工做副本,須要使用checkout手動導出一個工做副本。
從版本庫導出數據
# svn checkout file:///data/svndata/pro1
取出任意深度的數據
# svn checkout file:///data/svndata/pro1/ad/html
將數據放到新目錄
# svn checkout file:///data/svndata/pro1 testweb
//將pro1工做副本放到testweb中,而不是默認生成的pro1目錄
# svn co file:///data/svn/my_xywy_com/ /www/other/my.xywy.com
// 導出my_xywy_com所有文件,到/www/other/my.xywy.com下
它能夠顯示工做副本中的全部項目
# svn status -u -v
18 16 sum fff.txt
18 1 root index2.php
18 10 sum index20090416.html
18 17 sum 111/fff.txt
18 17 sum 111/index2.php
18 17 sum 111/index20090416.html
18 17 sum 111/index.jsp
查看當前的版本倉庫內容
# svnlook info 版本倉庫
Sum//做者
2009-09-10 11:51:17 +0800 (Thu, 10 Sep 2009)//提交時間
0//最後一次提交參數信息
查看最近一次更新的修訂號
# svnlook youngest 版本倉庫
顯示一個版本倉庫中文件和目錄的樹形結構圖
# svnlook tree /data/svndata/pro2/ --show-ids
jytk.html <0-1.0.r1/232049>
gallery.php <3-1.0.r1/232223>
gywm.html <5-1.0.r1/232402>
database.php <7-1.0.r1/232579>
lxyp.html <b-1.0.r1/232979>
查看倉庫中某一個文件內容
#svnlook cat /data/svndata/pro2/ index.html//查看pro2項目的index.html文件中的內容
顯示被修改的文件
# svnlook diff /data/svndata/pro2/
Added: 11.txt//顯示增長了11.txt文件
5.3 導出svn版本庫中的文件夾若要完全刪除SVN版本庫某文件夾,可使用下面的方法。
查看項目sumitest中的列表
# svn list file:///data/svn/sumitest
fxywy/
fxywy/src
jxywy/
jxywy/src
src/
要把fxywy/src文件夾刪除,從新導入到新的項目sumitest2中,方法以下:
# svnadmin dump /data/svn/sumitest > sumi1.dump
// 導出sumitest整個項目到sumi1.dump
# cat sumi1.dump | /usr/local/svn/bin/svndumpfilter exclude /fxywy/src > sumi2.dump
// 從sumi1.dump過濾出/fxywy/src目錄。Windows中cat換成type
# svnadmin create /data/svn/sumitest2
// 建立新的項目庫
# svnadmin load /data/svn/sumitest2 < sumi2.dump
//導出/fxywy/src 到sumitest2庫
5.4 刪除svn版本庫中的文件夾svn delete 能夠從工做拷貝或版本庫刪除一個項目。
# svn delete -m 「Deleting file」file:///data/svn/sumitest2/fxywy/
// 刪除sumitest2下的/fxywy目錄