前言
很多开发者日常习惯使用 Git 做版本管理,但部分老旧项目、文档资源项目依然在使用 SVN。SVN 属于集中式版本控制系统,上手简单,权限管理直观,对大文件友好。TortoiseSVN 是 Windows 下最常用的 SVN 图形化客户端,俗称小乌龟。本篇文章讲解 SVN 基础、TortoiseSVN 安装配置、对接 Gitee 仓库、右键菜单全部功能、日常开发高频操作、命令行以及踩坑总结。
一、SVN 与 TortoiseSVN 基础介绍
1. SVN(Subversion)
SVN 是集中式版本控制系统,所有版本数据保存在中央远程仓库,本地只是一份工作副本。所有提交、回滚、对比都要和远程仓库交互。
优点
- 上手简单,学习成本低
- 权限粒度细,可以针对目录设置读写权限
- 对二进制大文件友好,适合文档、资源文件管理
- 操作逻辑简单,适合中小型团队
缺点
- 依赖中央仓库,服务器故障会影响全部工作
- 分支操作相比 Git 笨重
- 离线无法提交版本
区分:Git 是分布式,本地完整保存全部仓库历史;SVN 集中式,本地只有当前代码。
2. TortoiseSVN
TortoiseSVN 是 Windows 平台开源免费的 SVN 图形客户端,集成到系统右键菜单,不需要单独打开软件,右键即可完成 svn 全部操作。
⚠️注意:安装 TortoiseSVN 的时候,务必勾选安装命令行工具,否则 cmd 无法使用 svn 指令。
二、准备工作
1. 安装 TortoiseSVN
- 官网下载对应系统版本:TortoiseSVN
- 运行安装包,一路 next,勾选 Command Line Tools 命令行工具
- 安装完成后,重启资源管理器,右键菜单就会出现 TortoiseSVN 相关选项。
- 验证命令行:打开 cmd,输入
svn --version,输出版本号代表安装成功。
2. Gitee 端开启 SVN 支持
Gitee 仓库同时支持 Git 和 SVN 访问。
- 打开你的 Gitee 项目仓库主页
- 克隆仓库处,切换到
SVN地址,复制 SVN 仓库地址 - Gitee 账号密码:使用 Gitee 账号,密码处填写个人私人令牌,不要填登录密码。
Gitee 现在禁止账号登录密码直接用于 svn/http 访问,需要生成私人令牌。
生成 Gitee 私人令牌步骤
- Gitee 右上角头像 → 设置 → 安全设置 → 私人令牌
- 生成新令牌,勾选权限:
projects(项目相关权限) - 复制保存令牌,只显示一次,这个就是 SVN 访问时的密码。
三、TortoiseSVN 关联 Gitee 仓库完整流程
方式 1:检出(Checkout)远程仓库到本地
适用于 Gitee 已经有仓库,把代码拉取到本地
- 在本地新建一个空文件夹,作为工作目录
- 文件夹空白处右键 →
SVN Checkout... URL of repository:粘贴 Gitee 的 SVN 仓库地址Checkout directory:本地工作目录(刚才新建文件夹)- 检出深度默认
Fully recursive全部递归,点击 OK - 弹窗输入账号:gitee 用户名;密码:私人令牌(不行了用gitee 密码!!!)
- 等待完成,本地文件夹就会拉取远程仓库文件,文件夹出现 svn 标记图标。
如果本地文件夹没有图标:TortoiseSVN 设置,重启电脑,或者清理图标缓存。
方式 2:本地已有项目,提交到 Gitee SVN 仓库
⚠️SVN 不能直接把本地普通文件夹上传远程,需要先导入,不要直接拖拽。
- 本地项目文件夹右键 → TortoiseSVN → Import
- URL 填写 Gitee SVN 远程地址
- 填写提交备注,OK,输入账号和私人令牌
- Import 只是把文件上传远程,本地文件夹不会变成 svn 工作副本!
- 导入完成后,必须执行 Checkout 检出远程仓库到本地,得到带 svn 管理的工作副本,后续才能提交更新。
重点坑:Import 导入之后本地不是工作副本,不能直接修改提交,必须重新 checkout。
四、TortoiseSVN 右键菜单全功能详解
在已经被 SVN 管理的工作副本文件夹空白处右键,弹出下面菜单,每一项作用与实操说明:
- Show log 显示日志查看当前文件 / 文件夹全部提交历史、版本号、提交人、时间日志。可对比版本、回溯历史。 使用:右键→Show log,双击条目查看改动;选中记录右键可做版本对比。 场景:追溯代码修改记录,定位 bug 引入版本。
- Repo‑browser 仓库浏览器无需完整检出,直接浏览远程仓库目录文件。 使用:输入远程 SVN 地址,输入账号令牌,直接查看远程文件,复制 URL。 场景:只想看远程文件,不想下载全部代码。
- Check for modifications 检查修改扫描本地,列出所有新增、修改、删除、冲突文件,无需连接远程服务器。 使用:提交前执行,确认自己改动了哪些文件,防止误提交无关内容。
- Revision graph 版本图图形化展示仓库分支、标签、合并分叉关系。 使用:点击生成可视化分支树。 场景:多分支项目理清分支演进关系。
- Resolve... 解决冲突手动修改完冲突代码之后,标记冲突已经处理完毕。 使用:冲突文件右键→Resolve,清理
.mine临时冲突文件。 场景:多人修改同一位置产生冲突后使用。 - Update to revision... 更新到指定版本本地切换到某个历史版本,只修改本地,不会改动远程仓库。 使用:输入版本号,本地回退;想要远程回滚需要在此基础上再 commit 提交。 场景:复现旧版本 bug,临时查看历史代码。
- Revert... 还原丢弃本地尚未提交的全部修改,恢复为服务器版本。修改直接清除,不可恢复。 使用:勾选需要还原文件确认。 场景:本地代码写乱,放弃改动回到原始版本。
- Clean up... 清理修复 SVN 工作副本锁定报错。操作中途中断会出现
working copy is locked。 使用:项目根目录右键 Clean up,勾选全部修复选项执行。 场景:update、commit 报错提示工作副本锁定。 - Get lock... 获取锁对二进制文件(图片、psd、word 文档)加独占锁,其他人不能提交该文件。 使用:选中文件 Get lock,填写备注。 场景:无法合并的二进制资源,防止多人同时编辑产生冲突。
- Release lock... 释放锁手动解除文件锁;提交代码默认会自动释放锁。 使用:文件右键 Release lock。 场景:加锁之后放弃修改,把权限还给其他同事。
- Branch/tag... 分支 / 标签SVN 分支和标签本质是远程仓库复制。trunk 主干开发,branches 存放开发分支,tags 存放发布版本。 使用:填写远程新分支 URL,填写提交日志创建。 场景:开发新功能分支、版本发布打版本标签。
- Switch... 切换本地工作副本切换到其他分支 / 标签,不需要重新 checkout。 使用:填写目标分支远程 URL,确认切换。 场景:主干切到开发分支进行开发。
- Merge... 合并将其他分支的改动合并到当前本地工作副本。 使用:先 switch 到目标分支,填写源分支地址与版本范围执行合并。合并后需要本地测试再 commit。 场景:功能分支开发完毕,合并回主干代码。
- Export... 导出导出一份纯净文件包,不带 SVN 隐藏.svn 元数据文件夹。 使用:选择输出路径导出。 场景:打包部署、交付客户代码包。
- Relocate... 重定位远程仓库地址变更,本地工作副本重新绑定新地址,不用重新检出。 ⚠️区分:仓库物理迁移才用 Relocate;切换分支用 Switch,不要混淆。 场景:Gitee 仓库改名、服务器域名更换。
- Add... 添加把本地新建文件加入 SVN 版本追踪,标记蓝色加号,还没有上传远程。 使用:选中新增文件 Add,之后执行 commit 才上传服务器。
直接复制粘贴进文件夹不会自动纳入版本,必须 Add。
- Copy URL to clipboard 复制 URL 到剪贴板一键复制当前文件对应的远程仓库地址。 场景:发给同事,用于 Repo‑browser 访问。
- Shelve... 搁置临时保存本地未提交修改,工作副本恢复干净状态。 使用:命名搁置补丁,保存改动,本地恢复干净。 场景:正在写一半代码,紧急处理别的 bug,先把改动存起来。
- Unshelve... 取消搁置恢复之前 Shelve 搁置保存的本地修改。 场景:bug 修复完成,恢复之前未完成的代码。
- Create patch... 创建补丁把本地改动导出
.patch补丁文件,不提交仓库,传递改动。 场景:没有仓库提交权限,把修改发给别人。 - Apply patch... 应用补丁把外部 patch 补丁应用到本地代码。
- Properties 属性配置 SVN 属性,最常用
svn:ignore配置忽略文件(idea、target、日志文件不参与版本管理),也可以配置外部引用 svn:externals。 - Settings 设置TortoiseSVN 全局配置。 常用:清除保存账号令牌缓存、修改图标覆盖、配置对比工具、网络代理。
- Help 帮助:官方帮助文档。
- About 关于:查看 TortoiseSVN 版本号。
日常高频操作
- SVN Update:拉取远程最新代码,多人协作修改前优先 update
- SVN Commit:提交本地修改到远程,必须填写提交备注日志
图标状态说明:
- 绿色对勾:本地文件和远程版本一致
- 红色感叹号:本地修改未提交
- 蓝色加号:新增待提交文件
- 黄色感叹号:文件冲突
冲突处理流程
多人修改同一位置代码,update 产生冲突,生成.mine、.rxxx冲突文件。
- 手动打开文件合并代码
- 冲突文件右键 Resolve 标记冲突解决
- 执行 commit 提交
五、命令行 SVN 常用命令
安装勾选 Command Line Tools 后 cmd 可直接执行
# 检出仓库 svn checkout 仓库地址 本地目录 # 更新 svn update # 提交,‑m填写注释 svn commit -m "完成登录模块开发" # 添加文件 svn add 文件名 # 查看日志 svn log # 撤销本地修改 svn revert 文件名六、常见问题踩坑汇总
- Import 导入后本地无法提交Import 只是上传文件,本地不是工作副本。解决方案:执行 Checkout 检出仓库。
- 文件夹没有小乌龟图标TortoiseSVN 设置里面重置图标缓存,重启电脑,或者确认安装时勾选 shell 扩展。
- svn 检出报错 SSL 证书问题右键 TortoiseSVN 设置,网络,勾选忽略 SSL 证书校验。
- 提交忘记写日志SVN 强制要求提交日志,空备注无法提交,写清楚修改记录方便追溯。
七、SVN 和 Git 简单对比总结
表格
| 特性 | SVN(TortoiseSVN) | Git |
|---|---|---|
| 架构 | 集中式 | 分布式 |
| 存储 | 中央仓库保存版本,本地仅副本 | 本地完整全量版本库 |
| 大文件 | 支持友好 | 需要 LFS 辅助 |
| 分支 | 笨重 | 轻量高效 |
| 离线操作 | 不能离线提交 | 本地可提交 |
| Gitee 支持 | 支持 SVN 地址 | 原生支持 |
结尾
SVN 虽然不如 Git 流行,但在文档管理、传统项目、部分企业内部系统仍然大量使用。TortoiseSVN 图形化操作降低了 SVN 使用门槛。区分 Import 导入和 Checkout 检出的区别,避开新手高频坑点。
本文环境:Windows11、TortoiseSVN 最新版、Gitee 私有 / 公开仓库