SVN服务器搭建

admin 2021年12月07日 847次浏览

使用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
      
  • 启动/停止SVN服务

    # 启动SVN服务
    ## -d:以后台运行模式启动SVN服务
    ## -r:指定SVN服务根目录
    ## --listen-port:监听端口,默认端口3690
    [root@localhost ~]# svnserve -d -r /svn/files/my_repos --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 ~]# vi svn_start.sh 
    #!/usr/bin/bash
    svnserve -d -r /svn/files/my_repos/ --listen-port=3690
    ## 将启动脚本添加到 /etc/profile.d/ 中
    [root@localhost ~]# cp /root/svn_start.sh /etc/profile.d/
    
    # 在防火墙中开放端口,此处使用firewalld防火墙
    ## 首先确认防火墙谁否开启
    [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 ~]# vi /etc/selinux/config
    SELINUX=disabled
    

4、访问SVN服务器

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

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

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

5、简单故障处理

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

  • 认证失败

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

  • 认证配置无效

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