SVN安裝及配置

 

一、SVN介紹
SVN是一個版本控制工具,Subversion 的版本庫(repository),就是位於服務器端,統一管理和儲存數據的地方。
要創建一個版本庫,首先要確定採用哪種數據存儲方式。在 Subversion 中,版本庫的數據存儲有兩種方式,一種是在 Berkeley DB 數據庫中存放數據;另一種是使用普通文件,採用自定義的格式來儲存,稱爲 FSFS。
1 兩種版本庫數據存儲對照表

特性
Berkeley DB
FSFS
對操作中斷的敏感
很敏感;系統崩潰或者權限問題會導致數據庫“塞住”,需要定期進行恢復。
不敏感
可只讀加載
不能
可以
存儲平臺無關
不能
可以
可從網絡文件系統訪問
不能
可以
版本庫大小
稍大
稍小
擴展性:修訂版本樹數量
無限制
某些本地文件系統在處理單一目錄包含上千個條目時會出現問題。
擴展性:文件較多的目錄
較慢
較慢
檢出最新代碼的速度
較快
可以
大量提交的速度
較慢,但時間被分配在整個提交操作中
較快,但最後較長的延時可能會導致客戶端操作超時
組訪問權處理
對於用戶的 umask 設置十分敏感,最好只由一個用戶訪問。
對 umask 設置不敏感
功能成熟時間
2001 年
2004 年
 
二、SVN安裝
1所需軟件包
Apache-2.2.4
apr-1.3.8.tar.gz、apr-util-1.3.9.tar.gz
sqlite-amalgamation-3.6.17.tar.gz
subversion-1.6.5.tar.bz2
expat-1.95.7-4、expat-devel-1.95.7-4
客戶端:TortoiseSVN-1.6.5.16974-win32-svn-1.6.5.msi
2、安裝SVN
安裝apache
# ./configure --prefix=/usr/local/apache2 --enable-dav --enable-so --enable-modules=most
//注:編譯apache時要加上--enable-dav選項
# make
# make install
 
安裝apr、apr-util
# tar -zxvf apr-1.3.8.tar.gz -C /usr/src
# cd /usr/src/apr-1.3.8
# ./buildconf                 //驗證系統是否有python、autoconf、libtool
# ./configure --prefix=/usr/local/apr
# make
# make install
 
# tar -zxvf apr-util-1.3.9.tar.gz -C /usr/src
# cd /usr/src/apr-util
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make
# make install
 
安裝sqlite
#./configure --prefix=/usr/local/sqlite
# make
# make install
 
安裝svn
# tar -jxvf subversion-1.6.5.tar.bz2 -C /usr/src
# cd /usr/src/subversion-1.6.5/
# ./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/lo
cal/apr --with-apr-util=/usr/local/apr-util --with-sqlite=/usr/local/sqlite/ --with-ssl --with-zlib
--enable-maintainer-mode
# make
# make install
三、SVN配置
創建svn項目倉庫
# mkdir /data/svndata                          //創建根目錄
# svnadmin create /data/svndata/pro1             //創建項目倉庫pro1
# /usr/local/svn/bin/svn import /www/shop file:///data/svndata/pro1 -m "initial import"
//將shop導入/data/svndata/pro1
 
配置apache中svn認證
# vi /usr/apache/conf/httpd.conf

 <Location /svndata>                                                         //設置url,代表要訪問的倉庫的父目錄
   DAV svn
   SVNParentPath /data/svndata                                         //svn根目錄
   AuthType Basic
   AuthName "SVN Test"
   AuthzSVNAccessFile /data/svndata/authz.conf             //svn認證文件,創建一個authz.conf文件
   AuthUserFile /data/svndata/authfile                               //apache認證文件
   Require valid-user
   </Location>  

Apache配置文件中要有下面兩個參數
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn
 
創建apache認證用戶
# /usr/local/apache2/bin/htpasswd -(c)m /data/svndata/authfile sum
輸入密碼:sum123
# /usr/local/apache/bin/htpasswd /data/svndata/authfile wyj
//再添加一個用戶
 
配置svn權限文件
注:上面apache設置中的認證文件
# cat /data/svndata/authz.conf

[pro1:/]                                   //表示倉庫pro1根目錄
sum = rw                               //倉庫對sum用戶有讀寫權
wyj = r                                   //倉庫對wyj用戶有讀權限
[pro2:/]                                   //倉庫pro2根目錄
sum = r
wyj = rw
[/]                                           //這個表示在所有倉庫的根目錄下
* = r                                       //這個表示對所有的用戶都具有讀權限
[groups]                                   //這個表示羣組設置
developers = sum, wyj          //developers組中的用戶
[pro1:/]
@svn1-developers = rw       //對這個組有讀寫權限

 
修改svn倉庫目錄權限
???????????????????
啓動svn
# svnserver -d -r /data/svndata
四、SVN管理命令
1svn命令
導入數據到版本庫
# 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

 
2svnlook命令
查看當前的版本倉庫內容
# 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文件

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庫
4、刪除svn版本庫中的文件夾
svn delete 可以從工作拷貝或版本庫刪除一個項目。
# svn delete -m “Deleting file”file:///data/svn/sumitest2/fxywy/
// 刪除sumitest2下的/fxywy目錄
 
五、SVN問題
1、CentOS5 安裝svn時,make時出現下面的錯誤

/usr/bin/ld: cannot find -lexpat
collect2: ld returned 1 exit status
make: *** [subversion/svn/svn] Error 1

解決方法
缺少-lexpat 庫文件,找安裝盤中的
# rpm -ivh expat-x.x.x.x.rpm
# rpm -ivh expat-devel-x.x.x.x.rpm
 
2、在執行“svn checkout”時,顯示錯誤如下

Repository moved permanently to ' xxxxxx ' please relocate

3、在MyEclipse進行Java開發,用SVN進行版本控制。Update時提示如下錯誤

update -r HEAD D:/xywyworkspace/fxywy
    Working copy not locked; this is probably a bug, please report
svn: Directory 'D:\xywyworkspace\fxywy\WebRoot\WEB-INF\classes\com\.svn' containing working copy admin area is missing

原因是eclipse把src文件夾中的.svn文件夾也“編譯”到WEB-INF/classes中去了,而複製過來的.svn中存儲的是src文件夾中的版本信息,從而導致在更新時出錯。
解決方法:
打開Eclipse中的 Project->Properties->Java Build Path 菜單,在右側面板中的“Source”選項卡,在Excluded中加入“**/.svn/**”。也就是把.svn文件夾從編譯路徑中排除,這樣就不會出現上面的問題了。
4、當提交時顯示如下錯誤:

attempt to write a readonly database

則是因爲/data/svn/yishengquan/db 目錄中,權限不是apache可寫的權限。修改db目錄權限爲apache可寫即可。
# chmod www:www /data/svn/yishengquan/db

-rw-r--r-- 1 www www      3 9月 1 09:40 current
-r--r--r-- 1 www www     22 8月 30 18:18 format
-rw-r--r-- 1 www www   1920 8月 30 18:18 fsfs.conf
-rw-r--r-- 1 www www      5 8月 30 18:18 fs-type
-rw-r--r-- 1 www www      2 8月 30 18:18 min-unpacked-rev
-rw-r--r-- 1 www www 935936 9月 1 09:40 rep-cache.db
drwxr-sr-x 3 www www   4096 8月 30 18:18 revprops
drwxr-sr-x 3 www www   4096 8月 30 18:18 revs
drwxr-sr-x 2 www www   4096 9月 1 09:40 transactions

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