凌峰创科服务平台

Linux SVN服务器下载如何操作?

第一步:安装 SVN 客户端

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

Linux SVN服务器下载如何操作?-图1
(图片来源网络,侵删)

对于 Debian / Ubuntu / Mint 系统:

使用 apt 包管理器。

sudo apt update
sudo apt install subversion

对于 CentOS / RHEL / Fedora / Rocky Linux / AlmaLinux 系统:

使用 yumdnf 包管理器。

# 对于 CentOS 7, RHEL 7
sudo yum install subversion
# 对于 CentOS 8+, RHEL 8+, Fedora
sudo dnf install subversion

对于 Arch Linux 系统:

使用 pacman 包管理器。

sudo pacman -S svn

安装完成后,可以验证一下是否安装成功:

Linux SVN服务器下载如何操作?-图2
(图片来源网络,侵删)
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)。

Linux SVN服务器下载如何操作?-图3
(图片来源网络,侵删)

svn checkout (svn co) - 首次下载

这是最常用的命令,用于将整个项目或指定路径下载到本地。

基本语法:

svn checkout [仓库URL] [本地目录名]

示例 1: 下载整个 trunk 目录 假设你的项目在 svn://192.168.1.100/myprojecttrunk 目录下。

# 将仓库中的 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://...'

  • 原因:
    1. SVN 服务器未运行或网络不通。
    2. 防火墙阻止了 SVN 默认端口 (3690)。
  • 解决:
    1. 使用 pingtelnet 命令测试网络连通性。
    2. telnet 192.168.1.100 3690,如果能连接上,说明端口是通的。
    3. 检查客户端和服务器的防火墙设置,确保 3690 端口是开放的。

命令 用途 是否保留 .svn 目录
svn checkout [URL] [dir] 首次下载整个项目/路径,创建工作副本
svn update 更新已有的工作副本到最新版本
svn export [URL] [dir] 导出一份干净的代码副本,用于部署

对于大多数从服务器下载代码的场景,svn checkout 是你的首选,如果你只是想获取一份代码而不需要版本控制功能,则使用 svn export

分享:
扫描分享到社交APP
上一篇
下一篇