SVN(subversion)
svn(subversion)是近年来崛起的版本管理工具,是cvs的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。
运行方式
svn服务器有2种运行方式:独立服务器和借助。2种方式各有利弊,用户自行选择。本文由于使用的是nginx服务器, 由于nginx现在暂时不支持subversion ,所以本文选择的是SVN的独立安装模式
存数据储
svn存储版本数据也有2种方式:BDB和FSFS。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。 CentOS + SubVersion 开始安装
1. 操作系统: CentOS 6.0
1.获取svn 安装包
wget http://subversion.tigris.org/downloads/subversion-1.6.5.tar.gz
wget http://subversion.tigris.org/downloads/subversion-deps-1.6.5.tar.gz
2.编译svn
以root 用户登录
tar xfvz subversion-1.6.5.tar.gz
tar xfvz subversion-deps-1.6.5.tar.gz
cd subversion-1.6.5
./configure --prefix=/opt/svn --without-berkeley-db --with-zlib=zlib
(注:以svnserve 方式运行,不加apache 编译参数。以fsfs 格式存储版本库,不编译berkeley-db)
make clean
make
make install
3.修改配置文件
vi /etc/profile , 在/etc/profile 最后加入:
PATH=$PATH:/opt/svn/bin
export PATH
4.重载配置文件
source /etc/profile
5.svn 测试
svnserve --version
如果显示如下,svn 安装成功:
svn服务器配置
1.建立svn 版本库目录
可建多个:(这里我建立2 个)
mkdir -p /opt/svndata/repos1
mkdir -p /opt/svndata/repos2
2.建立svn 版本库
svnadmin create /opt/svndata/repos1
svnadmin create /opt/svndata/repos2
3.修改svn 版本库配置文件
版本库1:
vi /opt/svndata/repos1/conf/svnserve.conf
内容修改为:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos1
(注意:把文件中上面各项前面的# 号去掉,然后去掉他前面的空格。保存)
版本库2:
vi /opt/svndata/repos2/conf/svnserve.conf
内容修改为:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos2
即除realm = repos2 外,其他与版本库1 配置文件完全相同。如果有更多的版本库,依
此类推。
这里的各配置项意思是:
anon-access 指匿名访问的权限,可以是read,write,none,默认为read,这个建议配为none
auth-access 指认证用户的权限,可以是read,write,none,默认为write
password-db 指密码数据库的路径,去掉前面的,存的是认证用户的用户名和密码,
uername=passwd
authz-db 实现了以路径为基础的授权,也就是判断用户是否有操作对应路径的权限
(注意:把文件中上面各项前面的# 号去掉,然后去掉他前面的空格。保存)
4.配置允许访问的svn 用户
vi /opt/svn/conf/pwd.conf
为了简化配置,2 个版本库共用1 个用户配置文件。如有必要,也可以分开。
注意:对用户配置文件的修改立即生效,不必重启svn。
文件格式如下:
[users]
<用户1> = <密码1>
<用户2> = <密码2>
其中,[users]是必须的。下面列出要访问svn 的用户,每个用户一行。示例:
[users]
alan = password
king = hello
5.配置svn 用户访问权限
Vi /opt/svn/conf/authz.conf
为了简化配置,3 个版本库共用1 个权限配置文件/opt/svn/conf/pwd.conf。如有必要,
也可以分开。文件中定义用户组和版本库目录权限。
注意:
* 权限配置文件中出现的用户名必须已在用户配置文件中定义。
* 对权限配置文件的修改立即生效,不必重启svn。
用户组格式:
[groups]
<用户组名> = <用户1>,<用户2>
其中,1 个用户组可以包含1 个或多个用户,用户间以逗号分隔。
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
其中,方框号内部分可以有多种写法:
/表示根目录及以下。根目录是svnserve 启动时指定的,我们指定为/opt/svndata。这样,
/就是表示对全部版本库设置权限。
repos1:/表示对版本库1 设置权限
repos2:/abc 表示对版本库2 中的abc 项目设置权限
repos2:/abc/aaa 表示对版本库2 中的abc 项目的aaa 目录设置权限
权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、
r、wr 和空,空表示没有任何权限。
示例:
[groups]
admin = alan
[/]
@admin = rw
[repos1:/abc/aaa]
king = rw
[repos2:/pass]
king =
6.svn 配置完毕,删除无用文件
rm /opt/svndata/repos1/conf/authz
rm /opt/svndata/repos1/conf/passwd
rm /opt/svndata/repos2/conf/authz
rm /opt/svndata/repos2/conf/passwd
启动SVN
1.建立启动svn 的用户
useradd svn
passwd svn
根据提示为用户svn 设置密码
允许用户svn 访问版本库
chown -R svn:svn /opt/svndata
(这里我是直接用root 启动的)
2.启动svn
(1)用设定帐户启动
su liushuangzeng -c "svnserve -d --listen-port 9999 -r /opt/svndata"
其中:
su svn表示以用户svn 的身份启动svn
-d表示以daemon 方式(后台运行)运行
--listen-port 9999表示使用9999 端口,可以换成你需要的端口。但注意,使用1024
以下的端口需要root 权限
-r /opt/svndata指定根目录是/opt/svndata
(2)对于单个代码仓库:
启动命令: svnserve -d -r 文件夹路径--listen-host 192.168.100.131
其中-d 表示在后台运行, -r 指定服务器的根目录,这样访问服务器时就可以直接用svn:// 服务器ip 来访问了。
如果服务器有多ip 的话--listen-host 来指定监听的ip 地址.
我们可以在svn 客户端中通过svn://192.168.100.131 来访问svn 服务器
(3)对于多个代码仓库:
我们在启动时也可以用-r 选项来指定服务器根目录, 但访问时需要写上每个仓库相对于svn 根目录的相对路径.
比如, 我们有两个代码仓库/opt/svndata/repos1 和/opt/svndata/repos2, 我们用:
svnserve -d -r /opt/svndata --listen-host 192.168.1.100来启动, 那么在客户端访问时可以用svn://192.168.100.100/repos1 和svn://192.168.1.100/repos2 来分别访问两个项目启动完成以后
我启动的方法:
[root@austit fabian]# svnserve -d -r /opt/svndata --listen-host 192.168.100.131
注意:
svn 默认端口是3690 ,你需要在防火墙上开放这个端口。也可以通过svnserve 的--listen-port 选项来指定一个已经开放的其他端口, 不过这样的话客户端使用也必须家上端口, 如 svn://192.168.100.200:9999/.......
3.检查是否启动成功:(查看是否存在svnserve 进程)
ps -ef|grep svnserve
如果显示如下,即为启动成功:
svn 6941 1 0 15:07 ? 00:00:00 svnserve -d –listen-port 9999 -r /opt/svndata
我是用root 帐户启动的:
[root@austit fabian]# svnserve -d -r /opt/svndata --listen-host 192.168.100.131
[root@austit fabian]# ps -ef|grep svnserve
root 4513 1 0 21:07 ? 00:00:00 svnserve -d -r /opt/svndata --listen-host 192.168.100.131
root 4515 4409 0 21:07 pts/1 00:00:00 grep svnserve
导入SVN
1.设我的站点为/www/htdocs/mysite cd /www/htdocs
svn import commengine -m "initial import"
或者
svn import commengine svn:///192.168.1.100/repos1/mysite -m "initial import"
2.查看版本库
svn list
或者
svn list svn://192.168.1.100/repos1/mysite
3.从版本库检出
svn co svn://192.168.1.100/repos1/mysite mysite
SVN服务器搭建完毕