CentOS 环境下 SVN 1.7 的特性与价值
在深入安装步骤之前,理解 SVN 1.7 的核心改进是必要的,这有助于我们明白为何在某些情况下坚持使用此版本。
最重要的变化是工作副本格式的革新(WC-NG,Working Copy Next-Generation),在 SVN 1.7 之前,每个工作副本的子目录下都包含一个 .svn
的隐藏文件夹,用于存储该目录的版本信息,这种方式导致了几个问题:
- 性能开销:执行全局操作(如
svn status
或svn update
)时,SVN 需要遍历所有子目录的.svn
文件夹,操作缓慢。 - 目录污染:项目目录中遍布
.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 版本库
选择一个合适的目录来存放 SVN 版本库,/data/svn
。
# 创建主目录 sudo mkdir -p /data/svn # 创建一个名为 "project" 的版本库 sudo svnadmin create /data/svn/project
执行后,/data/svn/project
目录下会生成多个配置文件和目录,如 conf
、db
、hooks
等。
配置版本库
版本库的核心配置文件位于 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 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
服务。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复