svn工作副本不支持自动跨协议切换,必须用svn relocate命令显式更新url;先svn info确认当前url,再执行svn switch --relocate 旧url 新url,最后svn update同步;需确保新url可达、权限正确,并注意不同协议的服务端配置要求。

SVN工作副本本身不支持“跨服务器协议切换”这种操作——它只认一个仓库URL,协议(如 http://、https://、svn:// 或 file:///)是URL的一部分。所谓“协议切换”,本质是把工作副本从指向旧URL(含旧协议)迁移到新URL(含新协议),需用 svn relocate 命令完成,不是在控制台里点几下就能自动适配的。
确认当前仓库地址和协议
进入工作副本目录,运行:
svn info
查看输出中的 URL 字段,比如:URL: http://old-svn.example.com/svn/project
这说明当前使用的是 HTTP 协议。如果新服务器改用 HTTPS 或 SVN 协议,就必须显式更新这个 URL。
执行 relocate 切换协议和地址
命令格式为:
svn switch --relocate 旧URL 新URL
例如:
- 从 HTTP 切到 HTTPS:
svn switch --relocate http://old-svn.example.com/svn/project https://new-svn.example.com/svn/project - 从 HTTP 切到 svn://(需服务端启用 svnserve):
svn switch --relocate http://old-svn.example.com/svn/project svn://new-svn.example.com/project
注意:
– 必须确保新URL可访问,且你有对应权限;
– 旧URL必须与 svn info 显示的完全一致(包括末尾斜杠);
– 不支持通配符或部分替换,必须写全。
验证并同步最新状态
执行 relocate 后,运行:
svn info
确认 URL 已更新。再执行:
svn update
拉取新服务器上的最新版本。如果提示认证失败,说明新协议下凭据未缓存,需手动输入用户名密码,或提前清理旧认证缓存(~/.subversion/auth/ 下对应条目)。
常见协议切换注意事项
不同协议对客户端配置要求不同:
- HTTP/HTTPS:依赖 Apache + mod_dav_svn,需检查 SSL 证书是否被信任;
-
svn://:需服务端运行
svnserve -d -r /path/to/repos,防火墙开放 3690 端口; - file://:仅限本地访问,不能用于团队协作,也不支持 auth;
- 协议变更后,原有 hook 脚本、权限配置需在新服务端重新部署,工作副本本身不携带这些设置。
不复杂但容易忽略











