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

 

你可能感兴趣的:(SVN,职场,休闲)