CentOS系统如何安装配置SVN1.7版本?

CentOS 环境下 SVN 1.7 的特性与价值

在深入安装步骤之前,理解 SVN 1.7 的核心改进是必要的,这有助于我们明白为何在某些情况下坚持使用此版本。

CentOS系统如何安装配置SVN1.7版本?

最重要的变化是工作副本格式的革新(WC-NG,Working Copy Next-Generation),在 SVN 1.7 之前,每个工作副本的子目录下都包含一个 .svn 的隐藏文件夹,用于存储该目录的版本信息,这种方式导致了几个问题:

  1. 性能开销:执行全局操作(如 svn statussvn update)时,SVN 需要遍历所有子目录的 .svn 文件夹,操作缓慢。
  2. 目录污染:项目目录中遍布 .svn 文件夹,对于某些不希望这些元数据被看到的场景(如打包发布)需要额外处理。

SVN 1.7 彻底改变了这一模式,它将所有版本元数据集中存储在工作副本的根目录下的一个 .svn 文件夹中,这意味着:

  • 性能显著提升:全局命令只需读取一个地方的元数据,速度大幅加快。
  • 目录结构更清洁:除了根目录,其他子目录不再有 .svn 文件夹,使项目结构更清爽。
  • 更高效的操作:许多操作,如文件移动和重命名,处理起来更加高效。

对于需要与旧有构建脚本、部署工具或 IDE 插件兼容的项目,或者团队已经习惯了 1.7 版本的行为模式,在 CentOS 上部署 SVN 1.7 便成为一个明确的需求。


在 CentOS 上安装 SVN 1.7

CentOS 的官方 yum 源通常提供的是系统默认维护的 SVN 版本,对于 CentOS 6,它可能就是 1.6;对于 CentOS 7,则可能是 1.7 或更高版本,要精确安装 1.7 版本,最可靠的方法是使用第三方 yum 仓库,WANdisco 提供的 SVN 仓库。

以下是在 CentOS 6/7 上安装 SVN 1.7 的典型步骤:

添加 WANdisco SVN 仓库

WANdisco 提供了兼容多种 RHEL/CentOS 版本的 SVN 仓库,需要下载并安装其仓库配置包。

# 下载 WANdisco 的仓库 rpm 包
wget http://opensource.wandisco.com/centos/6/svn-1.7/RPMS/x86_64/wandisco-svn-release-1-2.noarch.rpm
# 安装该 rpm 包,这会将仓库信息写入 /etc/yum.repos.d/
sudo rpm -Uvh wandisco-svn-release-1-2.noarch.rpm

注意:请根据您的 CentOS 版本(6 或 7)和系统架构(x86_64)选择正确的下载链接,以上链接以 CentOS 6 x86_64 为例。

清理 yum 缓存并安装 SVN 1.7

添加新仓库后,需要清理 yum 缓存以确保它从新仓库获取软件包信息。

# 清理 yum 缓存
sudo yum clean all
# 安装 subversion,yum 会自动选择 WANdisco 仓库中的 1.7 版本
sudo yum install subversion -y

验证安装

安装完成后,通过以下命令验证 SVN 版本是否为 1.7。

svn --version

如果输出信息中包含 svn, version 1.7.x,则表示安装成功。


配置 SVN 服务器与权限管理

安装软件只是第一步,接下来需要创建版本库并配置访问权限。

创建 SVN 版本库

CentOS系统如何安装配置SVN1.7版本?

选择一个合适的目录来存放 SVN 版本库,/data/svn

# 创建主目录
sudo mkdir -p /data/svn
# 创建一个名为 "project" 的版本库
sudo svnadmin create /data/svn/project

执行后,/data/svn/project 目录下会生成多个配置文件和目录,如 confdbhooks 等。

配置版本库

版本库的核心配置文件位于 conf 目录下。

  • svnserve.conf:主配置文件,用于控制版本库的访问策略。
  • passwd:用户名和密码文件。
  • authz:路径授权文件,用于设置不同用户或组的读写权限。

编辑 svnserve.conf

sudo vi /data/svn/project/conf/svnserve.conf

取消以下几行的注释,并进行相应设置:

参数 说明
anon-access = none none 禁止匿名用户访问。
auth-access = write write 授权用户拥有写权限。
password-db = passwd passwd 指定密码文件为 passwd
authz-db = authz authz 指定授权文件为 authz
realm = My Project Repository 自定义 认证域,客户端会显示此名称。

编辑 passwd 文件,添加用户:

sudo vi /data/svn/project/conf/passwd

[users] 标记下添加用户,格式为 用户名 = 密码

[users]
harry = harrys_secret
sally = sallys_secret

编辑 authz 文件来配置权限:

sudo vi /data/svn/project/conf/authz

可以创建用户组,并为不同路径设置权限。

[groups]
dev_team = harry, sally
# 根目录权限,dev_team 组有读写权限
[/]
@dev_team = rw
# 给特定用户只读权限
[/branches/release]
harry = r

启动与管理 SVN 服务

配置完成后,就可以启动 svnserve 服务了。

启动服务

使用 -d(后台运行)和 -r(指定版本库根目录)参数启动服务。

# -r /data/svn 表示将 /data/svn 作为 SVN 的根目录
# 客户端访问时使用 svn://host/project
sudo svnserve -d -r /data/svn/

设置开机自启

为了保证服务器重启后 SVN 服务能自动运行,需要将其配置为系统服务。

CentOS系统如何安装配置SVN1.7版本?

  • 对于 CentOS 6 (使用 chkconfig)

    创建一个启动脚本,可以复制一份 /etc/init.d/functions 模板,或者手动创建一个名为 svnserve 的文件在 /etc/init.d/ 目录下,内容大致如下:

    #!/bin/bash
    # chkconfig: - 85 15
    # description: svn server
    . /etc/rc.d/init.d/functions
    exec="/usr/bin/svnserve"
    prog="svnserve"
    repo_root="/data/svn"
    [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
    lockfile=/var/lock/subsys/$prog
    start() {
        [ -x $exec ] || exit 5
        [ -d $repo_root ] || exit 5
        echo -n $"Starting $prog: "
        daemon --user svn "$exec -d -r $repo_root"
        retval=$?
        echo
        [ $retval -eq 0 ] && touch $lockfile
        return $retval
    }
    stop() {
        echo -n $"Stopping $prog: "
        killproc $prog
        retval=$?
        echo
        [ $retval -eq 0 ] && rm -f $lockfile
        return $retval
    }
    restart() {
        stop
        start
    }
    case "$1" in
        start)
            start
            ;;
        stop)
            stop
            ;;
        restart)
            restart
            ;;
        *)
            echo $"Usage: $0 {start|stop|restart}"
            exit 2
    esac
    exit $?

    然后赋予执行权限并添加到 chkconfig:

    sudo chmod +x /etc/init.d/svnserve
    sudo chkconfig --add svnserve
    sudo chkconfig svnserve on
  • 对于 CentOS 7 (使用 systemctl)

    CentOS 7 推荐使用 systemd,创建一个服务文件 /etc/systemd/system/svnserve.service

    [Unit]
    Description=Subversion protocol daemon
    After=syslog.target network.target
    [Service]
    Type=forking
    User=svn
    Group=svn
    ExecStart=/usr/bin/svnserve -d -r /data/svn
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure
    RestartSec=5
    [Install]
    WantedBy=multi-user.target

    然后启用并启动服务:

    sudo systemctl daemon-reload
    sudo systemctl enable svnserve.service
    sudo systemctl start svnserve.service

客户端基本操作与 1.7 版本优势体验

服务端配置好后,客户端就可以通过 svn://<服务器IP>/project 的地址进行访问。

检出工作副本

svn checkout svn://<服务器IP>/project --username harry

输入密码后,代码会被下载到本地,可以进入 project 目录,你会发现只有这一个根目录下有 .svn 文件夹,这正是 1.7 版本的标志性特征。

常用操作

  • svn add <文件>:将新文件添加到版本控制。
  • svn commit -m "提交信息":提交本地修改到服务器。
  • svn update:从服务器更新到最新版本。
  • svn status:查看本地文件状态,在 1.7 中,这个命令的执行速度会明显快于旧版本。

相关问答FAQs

问题 1:我为什么需要特意安装 SVN 1.7,而不是直接使用系统 yum 源中的最新版本?
答: 主要原因有三点:1)项目兼容性:一些老旧的项目、自动化构建脚本(如 Jenkins 的旧插件)或特定的 IDE 集成工具可能只与 SVN 1.7 的工作副本格式或协议完全兼容,升级到更高版本可能导致这些工具无法正常工作,2)团队一致性:如果团队中大部分成员或协作系统都基于 1.7 版本,为了保持环境统一和避免潜在问题,新部署的服务器也应保持版本一致,3)特定功能需求:虽然新版本功能更多,但某些团队可能已经习惯了 1.7 的特定行为和性能表现,且没有升级的需求。

问题 2:我忘记了某个 SVN 用户的密码,如何重置?
答: SVN 服务器的用户密码是以明文形式存储在版本库 conf 目录下的 passwd 文件中的,重置密码非常简单:1)登录到您的 CentOS 服务器,2)找到对应版本库的 conf 目录,/data/svn/project/conf,3)使用文本编辑器(如 vi)打开 passwd 文件,4)找到需要重置密码的用户行,将其等号后面的旧密码替换为新密码,5)保存文件并退出,这种修改是即时生效的,用户下次使用新密码即可登录,无需重启 svnserve 服务。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-01 21:50
下一篇 2025-10-01 21:53

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信