SVN服务器搭建

admin 2021年12月07日 954次浏览

使用SVN可以记录每一次文件和目录的修改情况,这样就可以借此将数据恢复到以前的版本,并可以查看数据的更改细节,同时也可以支持多人协同修改同一个文件

在很多人的印象中,SVN是程序员的专用工具,其实不然,对于技术人员来说,其实也有很大的用途。如果我们对技术文档有备份或者需要分享的话,有时候对文档中部分类容修改后,没有及时替换原有文件,时间久了,就不知道那个文档才是最终文档,或许有人说,我可以查看最后修改时间,这也是一种办法,但是,如果有时候需改了内容也保存了,但是又觉得可以不用修改,然后就将修改后的内容删掉,然后又保存了,其实内容并没有变,但是文件的最后修改时间却变了;还有一个问题,就是无法做协同修改。如果使用SVN的话,以上问题都能得到很好的解决

1、系统环境

  • OS:CentOS Linux release 8.4.2105

  • SVN:subversion 1.10.2

2、安装subversion

# 使用yum安装 subversion
[root@localhost ~]# yum install subversion -y

# 产看是否安装成功
[root@localhost ~]# svnserve --version
svnserve,版本 1.10.2 (r1835932)

3、创建版本库

  • 创建SVN数据目录

    [root@localhost ~]# mkdir -p /svn/files
    
  • 创建版本库

    [root@localhost ~]# svnadmin create /svn/files/my_repos
    
  • 删除版本库

    如果需要删除版本库,可使用 rm -fr 删除版本库文件

    [root@localhost ~]# svnadmin rm -fr /svn/files/my_repos
    
  • 配置svn配置文件

    每个版本库创建之后,都会在/svn/files/<versionDB_name>/conf/下生成以下四个文件

    • authz:SVN服务器授权文件

      # 用户组配置
      [groups]
      组名=用户1,用户2,用户3,...
      
      # 根目录访问权限配置
      [/] 
      用户1 = rw
      用户2 = r
      @用户组1 = rw
      * =
      
      # 子目录访问权限配置
      [my_repos:/dir]
      @用户组1 = rw
      * = r
      
    • passwd:用户配置文件

      [users]
      用户1 = 密码
      用户2 = 密码
      
    • svnserve.conf:svnserve守护进程配置文件

      [general]
      # 匿名用户权限
      anon-access = read
      # 认证用户权限
      auth-access = write
      # 用户认证文件
      password-db = passwd
      # 用户权限配置文件
      authz-db = authz
      # 在登陆时提示的认证域名称
      realm = my_repos
      # 使svnserve在将用户名与上面配置的authz-db文件中的授权规则进行比较之前,对用户名进行大小写规范化
      force-username-case = none
      

4、启动/停止SVN服务

  • 启动SVN服务

    [root@localhost ~]# svnserve -d -r /svn/files/my_repos --listen-port=3690
    

    -d:以后台运行模式启动SVN服务

    -r:指定SVN服务根目录

    –listen-port:监听端口,默认端口3690

  • 查看服务是否启动

    [root@localhost ~]# ps aux | grep svnserve
    root        2618  0.0  0.0  98964   880 ?        Ss   14:07   0:00 svnserve -d -r /svn/files/my_repos --listen-port=3690
    
  • 停止SVN服务

    # 首先查看服务运行情况,找到服务的PID号(参考上一步),然后使用 kill 命令结束进程
    [root@localhost ~]# kill 2618
    
  • 创建开机启动脚本

    [root@localhost ~]# vim /etc/profile.d/svn_start.sh 
    #!/bin/bash
    num=`ps aux | grep 'svnserve' | wc -l`
    if [ $num -lt 2 ]
    then
            svnserve -d -r /data/st4tb/svn --listen-port=3690
    fi
    
  • 配置防火墙策略

    # 确认防火墙是否开启
    [root@localhost ~]# systemctl status firewalld
    ● firewalld.service - firewalld - dynamic firewall daemon
       Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
       Active: active (running) since Tue 2021-12-07 16:54:52 CST; 9s ago
       
    # 开放端口
    [root@localhost ~]# firewall-cmd --add-port=3690/tcp --permanent
    success
    [root@localhost ~]# firewall-cmd --reload
    success
    
    # 关闭SELINUX
    [root@localhost ~]# vim /etc/selinux/config
    SELINUX=disabled
    

5、访问SVN服务器

服务器搭建好以后,我们就该测试服务器了。在Windows下,我们使用TortoiseSVN来访问SVN服务器,软件的安装这里就不再阐述。

在资源管理器中输入:svn://svn_serverIP:port 如果服务器配置成功,那么就会出现以下对话框

输入用户名和密码后,即可进入SVN仓库,如下图

6、简单故障处理

由于是第一次搭建SVN服务器,在配置方面难免会遇到各种问题,有两个问题新手很容易遇到,而且不容易观察到

  • 认证失败

    产生该故障的原因是因为在 “/svn/files/test/conf/passwd” 中,用户名前面有空格所导致,只需要将用户名前面的空格删除即可

  • 认证配置无效

    产生该故障的原因是,由于在 “ /svn/files/test/conf/svnserve.conf” 中开启了 “groups-db = groups” 选项,但是在配置文件夹中 groups 配置文件不存在所导致。处理该问题的方法有两种,一种是如果不需要设置组的话,可以在配置文件中,将该选项关闭;另一种方法是在 “/svn/files/test/conf/” 目录下创建一个 “groups” 文件即可