http://www.cnblogs.com/hhuai/archive/2011/03/10/1979877.html
svn服务器有2种运行方式:
1. 独立服务器 (例如:svn://xxx.com/xxx)
2. 借助apache。(例如:http://svn.xxx.com/xxx)
由于我装的是nginx, 所以选择了第一种方式-独立的svn服务器。
svn存储版本数据也有2种方式:
1. bdb
2. fsfs。
因为bdb方式在服务器中断时,有可能锁住数据,所以还是fsfs方式更安全一点,我也选择这种方式。
环境: svn服务器安装操作系统: centOS5.6 (x64)
获取svn安装包:
# wgethttp://subversion.tigris.org/downloads/subversion-1.6.6.tar.gz
# wgethttp://subversion.tigris.org/downloads/subversion-deps-1.6.6.tar.gz
编译svn以root用户登录:
# tarxfvz subversion-1.6.6.tar.gz
# tarxfvz subversion-deps-1.6.6.tar.gz
# cdsubversion-1.6.6
#./configure --prefix=/usr/local/svn --without-berkeley-db
(注:以svnserve方式运行,不加apache编译参数。以fsfs格式存储版本库,不编译berkeley-db)
# make&& make install
在/etc/profile最后加入 svn path 以方便操作:
export PATH=$PATH:/usr/local/svn/bin/
测试是否安装成功:
#svnserve --version
或
#/opt/svn/bin/svnserve –version
# svnserve –version
假如显示如下,svn安装成功:
svnserve,version 1.6.6 (r40053)
compileddec 2 2009, 22:37:15
copyright(c) 2000-2009 collabnet.
subversionis open source software, see http://subversion.tigris.org/
thisproduct includes software developed by collabnet (http://www.collab.net/).
thefollowing repository back-end (fs) modules are available:
* fs_fs: module for working with a plain file (fsfs) repository.
cyrussasl authentication is available.
建立svn版本库目录(可建多个):
# mkdir-p /opt/svndata/repos
建立svn版本库repos:
#svnadmin create /opt/svndata/repos/
修改svn版本库配置文件版本库:
# vi/opt/svndata/repos/conf/svnserve.conf
内容修改为:(注:去掉以下行前的#时,也要去掉前面的空格,否则会出现svnserve.conf:12: Option expected的错误)
[general]
anon-access= none
auth-access= write
password-db= /opt/svn/conf/passwd
authz-db= /opt/svn/conf/authz
realm =repos
注:对用户配置文件的修改立即生效,不必重启svn。
passwd中[users]是必须的,文件格式如下:
[users]
username= password
配置svn用户访问权限:
# vi/opt/svn/conf/authz.conf
注重:
* 权限配置文件中出现的用户名必须已在用户配置文件中定义。
* 对权限配置文件的修改立即生效,不必重启svn。
用户组格式:
[groups]
= ,
其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
其中,方框号内部分可以有多种写法:
[/],表示根目录及以下,根目录是svnserve启动时指定的,我们指定为/opt/svndata,[/]就是表示对全部版本库设置权限。
[repos:/]表示对版本库repos设置权限
[repos2:/abc]表示对版本库repos2中的abc项目设置权限
[repos2:/abc/aaa]表示对版本库repos2中的abc项目的aaa目录设置权限
权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。
权限可以是w、r、wr和空,空表示没有任何权限。
示例:
[groups]
kwt_group_a:root # kwt的管理员,对kwt有完全权限
kwt_group_d:humin,shenjianfei,yuanfei,sunchengquan, # kwt的开发者,对kwt的trunk有完全的权限,但对其中的/trunk/admin/目录没有任何权限
kwt_group_t:test # kwt的测试者,对kwt的trunk有完全的读权限,但对其中的/trunk/admin/目录没有任何权限
jmz_group_a:root # JMZ的管理员,对JMZ有完全权限
jmz_group_d:humin,shenjianfei,yuanfei,sunchengquan, # JMZ的开发者,对JMZ的trunk有完全的权限,但对其中的/trunk/admin/目录没有任何权限
jmz_group_t:test # JMZ的测试者,对JMZ的trunk有完全的读权限,但对其中的/trunk/admin/目录没有任何权限
[/]
# 指定所有的版本库默认只读,root可读写
* = r
root =rw
humin =rw
[kwt:/]
# 指定对版本库kwt根目录的权限
@kwt_group_a= rw
@kwt_group_d= rw
@kwt_group_t= r
[kwt:/trunk/admin]
# 指定对版本库kwt的/trunk/admin根目录的权限
@kwt_group_a= rw
@kwt_group_d= r
@kwt_group_t= r
[jmz:/]
# 指定对版本库jmz根目录的权限
@jmz_group_a= rw
@jmz_group_d= rw
@jmz_group_t= r
[jmz:/trunk/admin]
# 指定对版本库jmz的/trunk/admin根目录的权限
@jmz_group_a= rw
@jmz_group_d= r
@jmz_group_t= r
# vi/opt/svn/conf/passwd
[users]
root =hwxxjs5236288
humin =hyshzy
shenjianfei= shenshen
yuanfei= feifei
liuminglong= longlong
sunchengquan= chengcheng
test =123456
启动svn,建立svn的用户
#useradd svn
# passwdsvn
根据提示,为用户svn设置密码
允许用户svn访问版本库:
# chown-R svn:svn /opt/svndata/
# su -svn
#svnserve -d -r /opt/svndata
# svnimport /usr/local/apache/htdocs file:///opt/svndata/jmz-m"jmz" (将htdocs下文件导入版本库jmz)
#killall svnserve
#svnserve -d -r /opt/svndata (重新启动并把opt/svndata地址隐藏,这个时候svn://192.168.1.111/jmz可以访问了)
------------------------------------------------------------------------------------------------------------------------------------
centos服务器拉取其他服务器上的源码
# mkdir-p /opt/sources
# chownsvn:svn /opt/sources
# chmod-R 755 /opt/sources
# svn co svn://192.168.1.20/JMZ/ /opt/sources //从服务器上检出代码到 /opt/sources目录
// 删除当前检出的源码中的.svn文件
# cd/opt/sources
# find .-type d -name '.svn' | xargs rm -fr
// 将当前/opt/sources/下的源码导入到当前服务器的版本库jmz中
# chownsvn:svn /opt/svndata/jmz/
# chmod-R 777 /opt/svndata/jmz/
# svn import /opt/sources/ file:///opt/svndata/jmz/ -m "jmz"