更新时间:2026-07-08 GMT+08:00
分享

部署和使用SVN

简介

Subversion(SVN) 是一个开源的版本控制系统,管理着随时间改变的数据。这些数据放置在一个中央资料档案库(repository) 中。这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。这样您就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。

本文以CentOS 7.2 64位系统为例,说明如何在CentOS 7.2上部署和使用SVN。

前提条件

  • 已购买一台弹性云服务器,且已为其绑定弹性公网IP。
  • 弹性云服务器所在安全组添加了如下表所示的安全组规则,具体步骤参见为安全组添加安全组规则
    表1 安全组规则

    方向

    优先级

    策略

    类型

    协议端口

    源地址

    入方向

    1

    允许

    IPv4

    TCP: 22

    0.0.0.0/0

    入方向

    1

    允许

    IPv4

    TCP: 80

    0.0.0.0/0

    入方向

    1

    允许

    IPv4

    TCP: 443

    0.0.0.0/0

    入方向

    1

    允许

    IPv4

    TCP: 3690

    0.0.0.0/0

  • 为了更好地获取和更新系统和软件,建议您更新镜像源为华为云镜像源,详细操作,请参见如何使用华为云开源镜像配置yum源(x86_64和鲲鹏)?

部署SVN

SVN具有HTTP和svnserve两种访问模式,这两种模式主要存在以下区别。您可以根据业务需要,选择以下其中一种部署方式。

功能

HTTP模式

svnserve模式

协议

使用HTTP协议进行通信。

使用自定义的SVN协议进行通信。

访问方式

支持通过Web浏览器或者SVN客户端进行访问。

仅支持通过SVN客户端进行访问。

端口

使用80端口进行通信。

使用3690端口进行通信。

安全性

通过HTTPS进行加密通信。

默认使用明文通信,可以通过启用加密选项进行加密通信。

配置

需要在Web服务器上进行配置。

需要在SVN服务器上进行配置。

功能支持

支持更多的功能,比如权限管理、日志查看等。

相对简单,功能较少。

  1. 登录弹性云服务器。

    具体操作请参见Linux ECS登录方式概述

  2. 安装SVN。

    1. 执行以下命令,安装SVN。
      yum install subversion
    2. 执行以下命令,查看SVN版本。
      svnserve --version

      回显如下类似信息:

  3. 安装Apache。

    1. 执行以下命令,安装httpd。
      yum install httpd -y
    2. 执行以下命令,查看httpd版本。
      httpd -version

      回显如下类似信息:

  4. 执行以下命令,安装mod_dav_svn。

    mod_dav_svn是一个Apache HTTP服务器的模块,用于提供SVN(Subversion)版本控制系统的Web访问功能。

    yum install mod_dav_svn -y

  5. 创建SVN版本库。

    1. 执行以下命令,创建目录。
      mkdir /var/svn
    2. 依次执行以下命令,创建版本库。
      cd /var/svn
      svnadmin create /var/svn/svnrepos
    3. 执行以下命令,将SVN仓库的用户组修改为apache。
      chown -R apache:apache /var/svn/svnrepos
    4. 依次执行以下命令,查看自动生成的版本库文件。
      cd svnrepos
      ls

      回显如下类似信息:

      Subversion目录说明如下:

      • conf目录:SVN版本库的配置文件(版本库的访问账号、权限等)。
      • db目录:存放所有版本控制的数据存放文件。
      • format文件:一个文本文件,文件中只包含一个整数,表示当前文件库配置的版本号。
      • hooks目录:放置hook脚本文件的目录。
      • locks目录:用来追踪存取文件库的客户端。

  6. 执行以下命令,增加SVN版本库的用户和密码。

    SVN默认使用明文密码,而HTTP并不支持明文密码,所以需要单独生成passwd文件。本示例中,增加用户userTest,密码设置为passWDTest。

    请根据实际情况选择并运行以下命令:

    • 如果您第一次增加用户,运行命令时需要带上参数-c生成文件。
      sudo htpasswd -c /var/svn/svnrepos/conf/passwd userTest
    • 如果您已经增加过用户,当后续还需要增加用户时,请运行以下命令。
      sudo htpasswd /var/svn/svnrepos/conf/passwd userTest

    根据提示设置用户的密码。

  7. 运行以下命令,进入conf目录。

    cd /var/svn/svnrepos/conf/

  8. 设置账号的权限。

    1. 执行以下命令,打开权限控制文件。
      vim authz
    2. i键进入编辑模式。
    3. 在末尾添加如下代码(其中,userTest为步骤6添加的账号,r表示读权限,w表示写权限)。
      [/]
      userTest=rw

    4. Esc键退出编辑模式,并输入:wq保存并退出。

  9. 修改SVN服务配置文件。

    1. 执行以下命令,打开SVN服务配置文件。
      vim svnserve.conf
    2. i键进入编辑模式。
    3. 找到如下配置行,删除行前面的注释符#和空格。
      注意:每行不能以空格开始,等号两端要有一个空格
      anon-access = read    #匿名用户可读。若设置anon-access = none,表示不允许匿名用户访问。设置为 none,可以使日志日期正常显示
      auth-access = write   #授权用户可写
      password-db = passwd  #使用哪个文件作为账号文件
      authz-db = authz      #使用哪个文件作为权限文件
      realm = /var/svn/svnrepos #认证空间名,版本库所在目录

    4. Esc键退出编辑模式,并输入:wq保存并退出。

  10. 执行以下命令,启动SVN版本库。

    svnserve -d -r /var/svn/svnrepos

  11. 执行以下命令,查看SVN服务是否开启。

    ps -ef |grep svn

    回显如下类似信息,表示SVN服务已经开启。

    运行killall svnserve命令,可停止SVN服务。

  12. 配置Apache。

    1. 执行以下命令,新增并编辑httpd配置文件。
      vim /etc/httpd/conf.d/subversion.conf
    2. i键进入编辑模式。
    3. 在subversion.conf文件中输入以下配置信息。
      <Location /svn>
      DAV svn
      SVNParentPath /var/svn
      AuthType Basic
      AuthName "Authorization SVN"
      AuthzSVNAccessFile /var/svn/svnrepos/conf/authz
      AuthUserFile /var/svn/svnrepos/conf/passwd
      Require valid-user
      </Location>
    4. Esc键退出编辑模式,并输入:wq保存并退出。
    5. 运行以下命令,启动Apache服务。
      systemctl start httpd.service

  1. 登录弹性云服务器。

    具体操作请参见Linux ECS登录方式概述

  2. 安装SVN。

    1. 执行以下命令,安装SVN。
      yum install subversion
    2. 执行以下命令,查看SVN版本。
      svnserve --version

      回显如下类似信息:

  3. 创建SVN版本库。

    1. 执行以下命令,创建目录。
      mkdir /var/svn
    2. 依次执行以下命令,创建版本库。
      cd /var/svn
      svnadmin create /var/svn/svnrepos
    3. 依次执行以下命令,查看自动生成的版本库文件。
      cd svnrepos
      ls

      回显如下类似信息:

      Subversion目录说明如下:

      • conf目录:SVN版本库的配置文件(版本库的访问账号、权限等)。
      • db目录:存放所有版本控制的数据存放文件。
      • format文件:一个文本文件,文件中只包含一个整数,表示当前文件库配置的版本号。
      • hooks目录:放置hook脚本文件的目录。
      • locks目录:用来追踪存取文件库的客户端。

  4. 设置SVN库的账号密码。

    1. 执行以下命令,打开用户配置文件。
      cd conf/
      vim passwd
    2. i键进入编辑模式。
    3. [users]块中添加用户账号和密码。

      添加用户账号和密码的格式为:账号=密码。如下图示例中的user1(账号) = passwd1(密码),注意等号两端要有一个空格。

    4. Esc键退出编辑模式,并输入:wq保存并退出。

  5. 设置账号的权限。

    1. 执行以下命令,打开权限控制文件。
      vim authz
    2. i键进入编辑模式。
    3. 在末尾添加如下代码(其中,user1为步骤3添加的账号,r表示读权限,w表示写权限)。
      [/]
      user1=rw

    4. Esc键退出编辑模式,并输入:wq保存并退出。

  6. 修改SVN服务配置文件。

    1. 执行以下命令,打开SVN服务配置文件。
      vim svnserve.conf
    2. i键进入编辑模式。
    3. 找到如下配置行,删除行前面的注释符#和空格。
      注意:每行不能以空格开始,等号两端要有一个空格
      anon-access = read    #匿名用户可读。若设置anon-access = none,表示不允许匿名用户访问。设置为 none,可以使日志日期正常显示
      auth-access = write   #授权用户可写
      password-db = passwd  #使用哪个文件作为账号文件
      authz-db = authz      #使用哪个文件作为权限文件
      realm = /var/svn/svnrepos #认证空间名,版本库所在目录

    4. Esc键退出编辑模式,并输入:wq保存并退出。

  7. 执行以下命令,启动SVN版本库。

    svnserve -d -r /var/svn/svnrepos

  8. 执行以下命令,查看SVN服务是否开启。

    ps -ef |grep svn

    回显如下类似信息,表示SVN服务已经开启。

    运行killall svnserve命令,可停止SVN服务。

使用SVN

使用SVN管理代码的常见流程为:

  1. 您提取源代码到本地(Checkout)。
  2. 其他人修改并提交源代码到Repository。
  3. 您获得最新的代码(Update)。
  4. 您修改并调试成功源代码。
  5. 提交修改后的代码到Repository,其他人即可看到您的修改(Commit)。

具体操作流程如下:

提取源代码到本地(Checkout)

  1. 在本地Windows环境中下载并安装TortoiseSVN客户端
  2. 在本地项目文件夹内的空白区域单击鼠标右键。

    本示例中,项目文件夹为C:\work01。

  3. 在弹出菜单中,选择“SVN Checkout...”。

  4. 填写如下参数后,单击“OK”。
    • URL of repository:版本库URL,源代码统一存放的地址,格式为svn://实例公网IP地址/。
    • Checkout directory:检出到本地的目录,本文示例中,目录为C:\work01。

    第一次登录需要输入账号和密码,即步骤3在passwd文件中设置的用户和密码。

    检出完成结果如下。

获取更新(Update)

SVN服务端系统库上的项目更新后,您可在本地项目文件空白处单击右键,选择“SVN Update”,即可自动完成下载最新项目,并会显示所有更新内容。

在原项目文件夹内选择SVN Update,会自动覆盖原有内容。建议您先备份,再更新,防止自己本来的项目内容丢失。

提交修改(Commit)

  1. 在项目文件空白处单击右键,选择“SVN Commit...”。

  2. 输入本次提交的版本更新信息(所做修改的注释),选中要提交的操作内容,单击“OK”。

    即可将本地项目提交到SVN服务器资源库,覆盖资源库项目从而实现更新。

    如果提交时出现冲突,即两人都提交修改,后提交者由于版本落后会提交失败。这时,您可以先备份自己的项目,然后从服务端下载最新的项目,并将自己的项目覆盖到本地项目文件夹,再单击SVN提交即可成功提交。

常见问题

问题描述:

为什么使用TortoiseSVN访问SVN服务器时服务连接,提示“主机没有反应”?

可能原因:

  • SVN服务器未启动
  • 安全组中未开放SVN服务器所需端口
  • ECS实例开启了firewalld防火墙,但是未放行SVN服务器所需的端口
处理方法:
  1. 执行以下命令,查看SVN服务状态。
    ps -ef |grep svn

    返回如下所示信息时,表示SVN服务已经开启。如果未返回以下信息,请执行svnserve -d -r /var/svn/svnrepos/启动SVN服务。

  2. 查看ECS实例所在安全组规则是否满足SVN服务器要求。
    • HTTP模式:开放22、80、443
    • svnserve模式:开放22、80、443、3690
  3. 查看firewalld防火墙。
    1. 查看firewalld防火墙状态。
      firewall-cmd --state 
      • 回显信息为not running说明firewalld防火墙未开启,对SVN服务器无影响。
      • 回显信息为running说明firewalld防火墙已开启,请继续执行下一步。
    2. 在firewalld规则中放行SVN服务器所需端口(例如3690)。
      firewall-cmd --add-port=3690/tcp --permanent
    3. 重新加载firewalld服务配置,使配置生效。
      systemctl reload firewalld

相关文档