1. 前言
Subversion(简称svn)是跨平台的开源版本控制系统,是cvs的接班人,目前绝大多数开源软件都使用svn作为代码版本管理软件。Subversion支持linux和windows,但较多安装在linux下。
svn服务器有两种运行方式:独立服务器和借助于apache。 svn:// http://
svn客户端:tortoisesvn
svn的基本工作思路: 在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序。有源代码库管理员统一管理这些源程序。每个用户在使用源代码库之前,首先要把源代码库里德项目文件下载到本地,然后开发人员可以在本地修改,左后用svn命令进行提交,游源代码库统一管理修改。
版本控制解决了:代码管理混乱、解决代码冲突困难、在代码整合期间引发bug、无法对代码的拥有者进行权限控制、项目不同版本的发布困难
配置subversion:
dav目录:是提供apache与mod_dav_svn使用的目录,让他们存储内部数据
db目录:就是所有版本控制的数据存放文件
hooks目录:放置hook脚本文件的目录
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#####DAV svn SVNParentPath /opt/svn/ AuthType Basic AuthName "hooper's svn" AuthUserFile /etc/httpd/passwd.conf AuthzSVNAccessFile /opt/svn/authz Require valid-user #####by-hooper-2013-08-28##### EOF
svn的apache配置文件会自动生成/etc/httpd/conf.d/subversion.conf
配置文件的说明如下:
#在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
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
查看仓库中某一个文件内容
#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目录