CentOS7下快速安装部署Svn服务
Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。SVN相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS,互联网上免费的版本控制服务多基于Subversion。
Subversion官网地址:http://subversion.apache.org/packages.html
SVN客户端:TortoiseSVN 官网下载地址:http://tortoisesvn.net/downloads.html
安装SVN服务:
yum install subversion -y
创建svn目录
mkdir -p /data/svn
新建资源仓库
svnadmin create /data/svn/project
ll /data/svn/project/
total 24
drwxr-xr-x 2 root root 4096 Mar 23 14:43 conf
drwxr-sr-x 6 root root 4096 Mar 23 15:15 db
-r--r--r-- 1 root root 2 Mar 23 14:35 format
drwxr-xr-x 2 root root 4096 Mar 23 14:35 hooks
drwxr-xr-x 2 root root 4096 Mar 23 14:35 locks
-rw-r--r-- 1 root root 229 Mar 23 14:35 README.txt
目录用途说明:
hooks目录:放置hook脚本文件的目录
locks目录:用来放置subversion的db锁文件和db_logs锁文件的目录,用来追踪存取文件库的客户端
format文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号
conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)
配置svn服务svnserver.conf
vim /data/svn/project/svnserver.conf
[general]
anon-access = none
auth-access = write
password-db = /data/svn/project/conf/passwd
authz-db = /data/svn/project/conf/authz
realm = My Test Repository #提示信息
添加用户和密码
vim /data/svn/project/passwd
[users]
a1 = 123abc
a2 = aaabbbccc
test1 = 11aabb
用户配置文件的修改立即生效,不必重启svn服务
配置用户授权文件
vim /data/svn/project/authz
[groups]
user = a1,a2
test = test1
[/]
@user = rw
@test = r
* =
格式说明
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
/ 表示对根目录(即/data/svn/project目录)下的所有子目录范围设置权限;
[/abc] 表示对资料库中abc项目设置权限;
创建一个user组,组成员包括a1和a2
创建一个test组,成员只有test1;
user组对目录有读写权限;
单个用户test1有读权限;
*=表示除了上面设置的权限用户组以外,其他所有用户都设置空权限,空权限表示禁止访问本目录,这很重要一定要加上。
注意:对权限配置文件的修改立即生效,不必重启svn。
启动svn服务
svnserve -d -r /data/svn/project/
注意:不要使用系统提供的 /etc/init.d/svnserve start 来启动,因为系统默认的启动脚本中没有使用 –r /data/svn/project参数指定一个资源。这种情况下启动的svn服务,客户端连接会提示“svn: No repository found in 'svn://x.x.x.x/project' ”这样的错误。
默认svn服务器端口是3690。
杀死svn服务:
ps -ef|grep svnserve
直接kill -9 Pid号即可
或者修改/etc/init.d/svnserve在start()函数部分的daemon增加svn路径,修改后的服务文件为:
cat /etc/init.d/svnserve
#!/bin/bash
#
# svnserve Startup script for the Subversion svnserve daemon
#
# chkconfig: - 85 15
# description: The svnserve daemon allows access to Subversion repositories \
# using the svn network protocol.
# processname: svnserve
# config: /etc/sysconfig/svnserve
# pidfile: /var/run/svnserve.pid
#
### BEGIN INIT INFO
# Provides: svnserve
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Short-Description: start and stop the svnserve daemon
# Description: The svnserve daemon allows access to Subversion
# repositories using the svn network protocol.
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/svnserve ]; then
. /etc/sysconfig/svnserve
fi
exec=/usr/bin/svnserve
prog=svnserve
pidfile=${PIDFILE-/var/run/svnserve.pid}
lockfile=${LOCKFILE-/var/lock/subsys/svnserve}
args="--daemon --pid-file=${pidfile} $OPTIONS"
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
lockfile=/var/lock/subsys/$prog
start() {
[ -x $exec ] || exit 5
[ -f $config ] || exit 6
echo -n $"Starting $prog: "
daemon --pidfile=${pidfile} $exec $args -r /data/svn/project
retval=$?
echo
if [ $retval -eq 0 ]; then
touch $lockfile || retval=4
fi
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} $prog
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
restart
}
force_reload() {
restart
}
rh_status() {
# run checks to determine if the service is running or use generic status
status -p ${pidfile} $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2
esac
exit $?
常见问题处理:
提示svn: No repository found in 'svn://x.x.x.x/project'错误?
解决:启动svn服务的时候没有使用-r /svn/project参数,没有指明资源库的具体路径。使用# svnserve -d -r /svn/project/ 命令来启动就可以了,不要使用/etc/init.d/svnserver脚本。
执行命令# svn co svn://x.x.x.x.x/project时提示“svn: Authorization failed”错误?
解决:一般这种授权失败的错误原因都来自conf/authz文件的配置。
checkout的时候SVN看到anon-access = read只读模式 日志文件显示正常,不要求用户名密码,而到了具体目录的时候问题发生了,这时没有用户密码就不能获得文件就会出错;
anon-access = none 禁止所有匿名访问,也就是说如果不在authz-db中开放访问的用户,是不会允许读写版本日志的,故系统对日志的读写也纳入禁止访问范围,所以anon-access = none才会正常。
Tag标签:「部署 svn」更新时间:「2021-11-03 00:46:57」阅读次数:「850」