Centos搭建SVN服务器

余生长醉 提交于 2019-12-08 12:46:48

之前我们搭建SVN服务器一直是在Windows服务器上面的,今天试着在Linux服务器上面搭建一下SVN服务器,整个过程很是简单,很容易操作。

一、服务器搭建

1、yum install subversion



直到显示Complete则表示SVN已经安装完成了。

2、输入rpm -ql subversion查看安装位置


我们知道svn在bin目录下生成了几个二进制文件。
输入svn --help可以查看svn的使用方法


3、创建svn版本库目录

mkdir -p /var/svn/svnrepos


4、创建版本库

svnadmin create /var/svn/svnrepos
执行了这个命令之后会在/var/svn/svnrepos目录下生成如下这些文件


目录用途说明:
hooks目录:放置hook脚本文件的目录
locks目录:用来放置subversion的db锁文件和db_logs锁文件的目录,用来追踪存取文件库的客户端
format文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号
conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)

5、进入conf目录(该svn版本库配置文件)


authz文件是权限控制文件
passwd是帐号密码文件
svnserve.conf SVN服务配置文件

6、设置帐号密码

vi passwd
在[users]块中添加用户和密码,格式:帐号=密码,如dan=dan


7、设置权限

# vi authz
[groups]
admin = jay,adolf
user = joe
[/]
@admin = rw
@user = r
* =


格式说明:
版本库目录格式: 
[<版本库>:/项目/目录] 
@<用户组名> = <权限> 
<用户名> = <权限>
/ 表示对根目录(即/svn/project目录)下的所有子目录范围设置权限;
[/abc] 表示对资料库中abc项目设置权限;
创建一个admin组,组成员包括jay和adolf
创建一个user组,成员只有joe
admin组对目录有读写权限;
单个用户joe有读写权限;
*=表示除了上面设置的权限用户组以外,其他所有用户都设置空权限,空权限表示禁止访问本目录,这很重要一定要加上。
注意:对权限配置文件的修改立即生效,不必重启svn。

8、修改svnserve.conf文件

vi svnserve.conf
打开下面的几个注释:
anon-access = read #匿名用户可读
auth-access = write #授权用户可写
password-db = passwd #使用哪个文件作为账号文件
authz-db = authz #使用哪个文件作为权限文件
realm = /var/svn/svnrepos # 认证空间名,版本库所在目录


9、启动svn版本库

svnserve -d -r /var/svn/svnrepos


注意:不要使用系统提供的 /etc/init.d/svnserve start 来启动,因为系统默认的启动脚本中没有使用 –r  /var/svn/svnrepos参数指定一个资源。这种情况下启动的svn服务,客户端连接会提示“svn: No repository found in 'svn://192.168.71.128/project' ”这样的错误。
默认svn服务器端口是3690。
杀死svn服务:
# ps -ef|grep svn
root      4642     1  0 16:08 ?        00:00:00 svnserve -d -r /var/svn/svnrepos
root      4692  3676  0 16:13 pts/2    00:00:00 grep svn
# kill -9 4642
若要使用/etc/init.d/svnserve 脚本,可以修改start()函数部分,如下:
start() {
    [ -x $exec ] || exit 5
    [ -f $config ] || exit 6
    echo -n $"Starting $prog: "
    daemon --pidfile=${pidfile} $exec $args -r /var/svn/svnrepos
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
完成 


10、安装好的svn服务端,默认是不会开机自启动的,每次开机自己启动会很麻烦,我们可以把它设成开机启动

首先:编写一个启动脚本svn_startup.sh,我放在/root/svn_startup.sh
#!/bin/bash
/usr/bin/svnserve -d -r /var/svn/svnrepos

这里的svnserve路径保险起见,最好写绝对路径,因为启动的时候,环境变量也许没加载。
绝对路径怎么查?
which svnserve

然后修改该脚本的执行权限
chmod ug+x svn_startup.sh

或者万能的

chmod 777 svn_startup.sh

最后:加入自动运行
vi /etc/rc.d/rc.local
在末尾添加脚本的路径,如:
/root/svn_startup.sh

现在,你可以重启一下试试了。 
ps -ef|grep svnserve

二、使用客户端连接

1、打开TortoiseSVN Repository Browser工具
在URL中输入:
svn://192.168.71.128回车,提示输入用户名和口令




三、常见问题解决

3.1 命令行方式连接,提示svn: No repository found in 'svn://192.168.71.128/project'错误?
解决:启动svn服务的时候没有使用-r /svn/project参数,没有指明资源库的具体路径。使用# svnserve -d -r /svn/project/ 命令来启动就可以了,不要使用/etc/init.d/svnserver脚本。
3.2 执行命令# svn co svn://192.168.71.128/project时提示“svn: Authorization failed”错误?
解决:一般这种授权失败的错误原因都来自conf/authz文件的配置
正确的配置如下:
[groups]
admin = jay,adolf
user = joe
[/]
@admin = rw
@user = rw
* =
保存

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!