CentOS 7 SVN 升级到 1.8
CentOS 7 默认仓库自带的 SVN 版本偏老(通常是 1.7.x)。大部分场景下够用,但当你遇到下面这些情况时就会想升级:团队要用 1.8 才支持的语法特性、旧版本存在已知安全漏洞,或者你需要在多台机器之间保持一致的 SVN 行为。此时可以通过配置 Wandisco 提供的 yum 源,把 SVN 升级到 1.8。
升级前先确认当前版本:
svn --version --quiet。1.8 相比 1.7 增加了--parents等命令选项、更好的合并跟踪等改进,但对老项目来说升级并不是必须的,先评估需求再动手。
先看两个版本的主要差异,判断是否真的需要升级:
| 特性 | SVN 1.7 | SVN 1.8 |
|---|---|---|
| 工作副本格式 | 单一 .svn 目录 |
兼容 1.7 格式,新增元数据特性 |
--parents 选项 |
不支持 | 支持 |
| 合并跟踪 | 基础 | 显著改进,svn merge --reintegrate 更可靠 |
| 代理 / 认证 | 较旧 | 更新,支持更多环境 |
如果团队只是用 SVN 存文档和简单代码,1.7 的功能完全够用;真正驱动升级的通常是:要使用 1.8 专有命令或行为、旧版本存在安全问题、或者统一多台机器上的版本。反过来,如果没有任何硬性需求,继续用系统自带的 1.7 反而更稳——Wandisco 源本身已多年未维护,为升级引入的风险未必小于旧版本的问题。
1. 删除旧版 SVN
yum remove subversion
先删除系统自带的旧版本 SVN(注意原文章中的 remover 为笔误,正确命令是 remove)。
2. 设置 SVN 1.8 安装源
vi /etc/yum.repos.d/wandisco-svn.repo
输入如下内容:
[WandiscoSVN]
name=Wandisco SVN Repo
baseurl=http://opensource.wandisco.com/centos/7/svn-1.8/RPMS/$basearch/
enabled=1
gpgcheck=0
3. 执行安装
yum clean all && yum install subversion -y
4. 验证安装
svn --version
输出应显示版本为 1.8:
svn, version 1.8.16 (r1740329)
compiled Apr 26 2016, 13:16:01 on x86_64-unknown-linux-gnu
再用 svnadmin --version 确认服务端工具同样升级成功——客户端与服务端工具版本不一致,可能出现仓库格式不兼容。还可以顺手验证仓库能否正常访问:
svnadmin verify /var/svn/repos
svnlook youngest /var/svn/repos
svnlook youngest 输出的修订号与升级前一致,说明仓库数据完好无损。
升级前的仓库备份
仓库升级和普通软件升级不一样:svnadmin 版本与仓库格式不兼容时,老仓库可能无法直接打开。稳妥的做法是先完整导出:
svnadmin dump /var/svn/repos > repos_backup.dump
万一出问题,用旧版 svnadmin load 就能还原,不丢任何提交历史。
一次性脚本
把整个升级过程合并为一条命令:
yum remove subversion
sudo tee /etc/yum.repos.d/wandisco-svn.repo <<-'EOF'
[WandiscoSVN]
name=Wandisco SVN Repo
baseurl=http://opensource.wandisco.com/centos/7/svn-1.8/RPMS/$basearch/
enabled=1
gpgcheck=0
EOF
yum clean all && yum install subversion -y && svn --version
升级后的一轮完整检查
升级完建议按下面顺序做一轮自检,把问题留在今天而不是留给线上用户:
svn --version确认客户端版本为 1.8;svnadmin --version确认服务端工具一致;svnlook youngest /var/svn/repos对比升级前的最大修订号;- 用
svn checkout拉一个工作副本,随便改个文件再提交,走一遍完整读写流程; - 确认原来的认证配置(如
authz、passwd)仍然生效。
注意事项
- 升级前请先备份 SVN 仓库(
svnadmin dump),避免升级过程出现兼容性问题导致数据损坏; - Wandisco 的仓库已停止维护多年,仅建议在兼容旧环境的场景下使用;如果是从零搭建,建议使用系统自带版本或迁移到 Git;
gpgcheck=0关闭了 GPG 校验,如安全要求较高可在配置中提供官方 GPG 密钥并设为gpgcheck=1;- 如果升级后
svnadmin版本与仓库格式不兼容,需要先用旧版svnadmin dump导出再导入。
升级后的常见问题
| 现象 | 处理 |
|---|---|
svn: E155021 等格式报错 |
先用旧版 svnadmin dump 导出,再用新版 svnadmin load 重建 |
svnadmin 仍是旧版 |
确认 yum 源生效,yum clean all 后重装一次 |
| 客户端连不上 | 检查 svnserve 或 Apache 模块是否随升级被重启/重装 |
| 认证失效 | 确认 authz、passwd 等配置文件路径和权限没有被改动 |
这些问题大多能在升级后的完整自检里提前发现,所以别跳过验证环节。
迁移到 Git 的替代方案
如果团队维护的仓库还没有历史包袱,也可以考虑直接迁移到 Git:用 git svn clone 可以把 SVN 历史完整导入 Git 仓库,之后享受更成熟的分支与 PR 协作和更丰富的生态工具。
迁移本身并不复杂:先在本地执行 git svn clone https://svn.example.com/repos -s myrepo 克隆全部历史,核对提交记录完整后,再推送到 GitHub 或 GitLab 的私有仓库,并通知团队成员切换工作流。注意迁移前让所有人先把本地修改提交并同步,避免历史分叉。对长期维护的项目,这是更值得投入的方向;如果只是想临时解决一个兼容性问题,则没必要为此换系统。
SVN 是常见的版本控制系统之一,更多版本控制与团队协作内容可以参考开发工具分类下的SVN 本地全局忽略设置和Git 工作流与网站开发。无论选择升级到 1.8 还是迁移到 Git,备份先行、逐步验证这两条原则都不会错。
参考:Subversion 官方文档 https://subversion.apache.org/docs/
原文链接:https://www.cnblogs.com/cqzhuomi/articles/17280906.html(博客园 CQZHUOMI,转载)