第一步:安装 SVN 客户端
在大多数 Linux 发行版中,SVN 客户端通常默认没有安装,你需要使用包管理器来安装它。

对于 Debian / Ubuntu / Mint 系统:
使用 apt 包管理器。
sudo apt update sudo apt install subversion
对于 CentOS / RHEL / Fedora / Rocky Linux / AlmaLinux 系统:
使用 yum 或 dnf 包管理器。
# 对于 CentOS 7, RHEL 7 sudo yum install subversion # 对于 CentOS 8+, RHEL 8+, Fedora sudo dnf install subversion
对于 Arch Linux 系统:
使用 pacman 包管理器。
sudo pacman -S svn
安装完成后,可以验证一下是否安装成功:

svn --version
如果显示了版本信息,说明安装成功。
第二步:理解 SVN 仓库的基本概念
在下载之前,你需要了解 SVN 仓库的几个核心部分:
- 仓库地址: 这是 SVN 服务器的统一资源标识符,通常以
svn://,http://,https://或file://开头。 - 项目路径: 在服务器上,你的项目代码通常位于仓库的某个路径下,
/trunk/my_project。 - 工作副本: 你下载到本地机器的代码副本,它包含了项目的文件和隐藏的
.svn目录,用于跟踪版本信息。 trunk(主干): 项目的主要开发线,通常包含最新的、不稳定的代码。branches(分支): 用于开发新功能或修复 bug 的独立线,不会干扰主干。tags(标签): 用于标记某个重要版本(如 v1.0, v2.1)的快照,通常是不可变的。
一个典型的 SVN 仓库 URL 结构可能如下:
svn://svn.example.com/my_project_repo/trunk
svn://svn.example.com/my_project_repo/branches/new_feature
svn://svn.example.com/my_project_repo/tags/v1.0
第三步:基本下载操作
SVN 提供了几个核心命令来获取代码,最常用的是 checkout (简写 co)。

svn checkout (svn co) - 首次下载
这是最常用的命令,用于将整个项目或指定路径下载到本地。
基本语法:
svn checkout [仓库URL] [本地目录名]
示例 1: 下载整个 trunk 目录
假设你的项目在 svn://192.168.1.100/myproject 的 trunk 目录下。
# 将仓库中的 myproject/trunk 下载到当前目录下的 myproject 文件夹 svn checkout svn://192.168.1.100/myproject/trunk myproject
执行后,会在当前目录创建一个名为 myproject 的文件夹,里面就是你的代码。
示例 2: 下载到当前目录 如果你想将下载的代码直接放在当前目录,可以省略本地目录名。
# 下载 trunk,并将内容直接放在当前目录 svn checkout svn://192.168.1.100/myproject/trunk .
注意: 最后的 代表当前目录。
svn export - 导出干净代码
svn export 下载代码,但不会创建 .svn 目录,这意味着它不会保留任何版本控制信息,适用于:
- 只想获取一份干净的代码,不需要进行提交或更新。
- 部署代码到生产服务器。
基本语法:
svn export [仓库URL] [本地目录名]
示例:
# 导出 trunk 目录,得到一个干净的 myproject_export 文件夹 svn export svn://192.168.1.100/myproject/trunk myproject_export
myproject_export 文件夹里没有 .svn 目录。
svn update (svn up) - 更新已存在的代码副本
当你已经有一个工作副本后,如果想获取服务器上的最新代码,使用 update。
基本语法:
# 在工作副本的根目录下执行 svn update
示例:
# 首先进入你之前 checkout 的目录 cd myproject # 更新代码到最新版本 svn update
svn update 会将你的本地代码与服务器上的代码同步。
第四步:进阶用法与常见场景
下载特定分支或标签
只需要在 checkout 命令的 URL 中指定分支或标签路径即可。
下载分支:
svn checkout svn://192.168.1.100/myproject/branches/experimental_feature experimental_branch
这会创建一个名为 experimental_branch 的工作副本,包含该分支的所有代码。
下载标签 (用于部署特定版本):
svn checkout svn://192.168.1.100/myproject/tags/v1.0.0 v1.0.0_code
这会创建一个名为 v1.0.0_code 的目录,包含 v1.0.0 版本的代码快照。tags 下的代码是只读的,svn update 仍然可以工作,但 svn commit 会失败。
只下载部分内容(SVN 1.7+)
如果你的项目很大,但只需要其中一部分,可以使用 --depth 参数来控制下载的深度。
empty: 空目录,只有基本结构。files: 只下载文件,不包含子目录。immediates: 下载指定目录下的文件和直接子目录。infinity: 下载整个目录(默认行为)。
示例: 只下载项目根目录下的文件和一级子目录
svn checkout svn://192.168.1.100/myproject/trunk --depth immediates myproject_shallow
之后,你可以再进入某个子目录,然后使用 svn update --set-depth infinity 来拉取该子目录的全部内容。
处理认证
如果你的 SVN 服务器需要用户名和密码,svn 命令会提示你输入。
交互式输入:
svn checkout svn://svn.example.com/repo # 输出: # Authentication realm: <svn://svn.example.com:37123> Example Realm # Username: your_username # Password for 'your_username': ********
命令行指定(推荐,用于脚本):
svn checkout --username your_username svn://svn.example.com/repo # 输出: # Password for 'your_username': ********
注意: 密码在命令行中仍然可见,并且会保存在 shell 历史记录中,更安全的方式是使用配置文件或 SSH 密钥认证。
使用配置文件存储凭证
为了避免每次都输入用户名和密码,可以编辑 SVN 的配置文件 ~/.subversion/servers。
# 编辑配置文件 nano ~/.subversion/servers
在文件末尾添加:
[groups] # 为一组服务器设置通用凭据 my_svn_servers = svn.example.com, svn.mycompany.com [my_svn_servers] # 设置用户名和密码 username = your_username password = your_password
警告: 这种方法会将明文密码保存在本地文件中,请确保文件权限设置正确 (chmod 600 ~/.subversion/servers)。
第五步:常见问题排查
错误:svn: E170000: URL '...' doesn't exist
- 原因: 你输入的 SVN 仓库 URL 或路径不正确。
- 解决: 检查 URL 是否拼写正确,确认服务器地址和项目路径是否存在,可以先尝试在浏览器中访问该 URL(如果服务器支持 HTTP/SVN 协议)。
错误:svn: E170001: Authentication failed
- 原因: 用户名或密码错误。
- 解决: 检查用户名和密码是否正确,确认该用户是否有访问该仓库的权限。
错误:svn: E155036: Please see the documentation for the 'global-ignores' option
- 原因: 本地工作副本的
.svn目录损坏。 - 解决: 删除本地的项目文件夹,然后重新执行
svn checkout。
错误:svn: E175002: Unable to connect to a repository at URL 'svn://...'
- 原因:
- SVN 服务器未运行或网络不通。
- 防火墙阻止了 SVN 默认端口 (3690)。
- 解决:
- 使用
ping或telnet命令测试网络连通性。 telnet 192.168.1.100 3690,如果能连接上,说明端口是通的。- 检查客户端和服务器的防火墙设置,确保 3690 端口是开放的。
- 使用
| 命令 | 用途 | 是否保留 .svn 目录 |
|---|---|---|
svn checkout [URL] [dir] |
首次下载整个项目/路径,创建工作副本 | 是 |
svn update |
更新已有的工作副本到最新版本 | 是 |
svn export [URL] [dir] |
导出一份干净的代码副本,用于部署 | 否 |
对于大多数从服务器下载代码的场景,svn checkout 是你的首选,如果你只是想获取一份代码而不需要版本控制功能,则使用 svn export。
