SVN是一個版本控制工具,Subversion 的版本庫(repository),就是位於服務器端,統一管理和儲存數據的地方。
要創建一個版本庫,首先要確定採用哪種數據存儲方式。在 Subversion 中,版本庫的數據存儲有兩種方式,一種是在 Berkeley DB 數據庫中存放數據;另一種是使用普通文件,採用自定義的格式來儲存,稱爲 FSFS。
特性
|
Berkeley DB
|
FSFS
|
對操作中斷的敏感
|
很敏感;系統崩潰或者權限問題會導致數據庫“塞住”,需要定期進行恢復。
|
不敏感
|
可只讀加載
|
不能
|
可以
|
存儲平臺無關
|
不能
|
可以
|
可從網絡文件系統訪問
|
不能
|
可以
|
版本庫大小
|
稍大
|
稍小
|
擴展性:修訂版本樹數量
|
無限制
|
某些本地文件系統在處理單一目錄包含上千個條目時會出現問題。
|
擴展性:文件較多的目錄
|
較慢
|
較慢
|
檢出最新代碼的速度
|
較快
|
可以
|
大量提交的速度
|
較慢,但時間被分配在整個提交操作中
|
較快,但最後較長的延時可能會導致客戶端操作超時
|
組訪問權處理
|
對於用戶的 umask 設置十分敏感,最好只由一個用戶訪問。
|
對 umask 設置不敏感
|
功能成熟時間
|
2001 年
|
2004 年
|
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
安裝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項目倉庫
# 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
導入數據到版本庫
# 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
|
2、svnlook命令
查看當前的版本倉庫內容
# 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目錄
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
|