ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

SVN使用教程:从下载安装、IDEA集成到提交与冲突解决

2026/9/19 19:51:00 拓冰建站 浏览量
SVN使用教程:从下载安装、IDEA集成到提交与冲突解决 老实说SVN 这套东西确实有点“老古董”的味道了很多从 Git 时代入行的新手第一次打开公司老项目的 SVN 地址时整个人是懵的这玩意怎么下载怎么把代码弄到本地改完了又怎么提交尤其是现在很多团队还在用 TortoiseSVN就是大家常说的“小乌龟”配合 IDEA 做日常开发流程上和 Git 的差别还真不小。这篇就把我从零开始摸 SVN 的完整过程写出来覆盖下载安装、汉化、IDEA 集成、拉取远程代码、提交本地代码以及那些非常容易踩的坑比如 unable to connect、冲突解决、回滚指定版本。不管你是刚入职接手老项目还是学校里课程设计要用 SVN 交作业照着做基本都能顺利跑通。1. 项目概述SVN 到底是干什么的1.1 为什么还有团队在用 SVN很多人不理解Git 都这么成熟了为什么还有公司抱着 SVN 不放说实话我在接触过一些传统企业、外包项目和学校实验室之后才明白SVN 能活到今天靠的不是情怀而是它确实在某些场景下更好用。首先是权限管理。SVN 可以在目录级别配置读写权限比如让普通开发人员只能提交项目里的src目录不能碰config目录或者发布脚本这在 Git 里要实现类似的效果会麻烦很多。其次是操作模型简单集中式仓库意味着代码永远有一份“官方正版”不会出现 Git 里那种本地分支一堆、合了半天不知道谁是最新的情况。还有一个很现实的原因老项目迁移成本太高。一个跑了五六年的项目历史提交记录、标签、分支全在 SVN 仓库里要完整迁移到 Git 不是不行但业务部门不会愿意花这个时间。所以 SVN 在短期内仍然会存在新人也必须掌握它。1.2 集中式版本控制的几个关键概念用一句话概括 SVN 的工作方式所有人都围绕一个中央仓库干活。开发者把代码从仓库里复制一份到本地改完之后再提交回中央仓库。整个过程涉及几个核心概念仓库RepositorySVN 服务端存放所有版本历史的地方可以理解成一个“云端档案库”。一切代码和修改记录都在这里。工作副本Working Copy你从仓库拉取到本地的那份代码里面的文件可以正常编辑但目录下会多出一个隐藏的.svn文件夹记录文件和仓库的对应关系。Checkout检出从仓库拉取代码到本地的动作。和 Git 的clone有点像但 SVN 的 checkout 可以只拉取某个子目录。Update更新把仓库里别人已经提交的新改动同步到本地工作副本。Commit提交把本地修改上传到中央仓库。注意SVN 没有本地提交这回事你改了代码如果不 commit别人永远看不到。我用一个生活化类比解释一下SVN 就像公司图书室里的一本“共享账本”每个人借出去一本复印件在上面改自己的内容改完了再交回图书室由图书室统一誊抄到正本上。其他人再借的时候拿到的就包含了你的修改。区别是这个誊抄不是自动的你得手动“提交”而且提交之前最好先把别人的最新内容拿下来看看免得你的修改把别人的内容给冲了。1.3 这篇文章能帮你解决什么问题如果你是第一次接触 SVN按顺序看完这篇文章你能做到以下几件事第一在 Windows 上正确安装 TortoiseSVN 和中文语言包并且把界面切换成中文第二在自己的 IDEA 里配置好 SVN 环境第三从远程仓库拉取项目代码到本地并正常打开第四修改代码后成功提交回远程仓库第五遇到无法连接仓库、代码冲突、误提交需要回滚等常见问题时知道大概怎么排查。下面就直接从环境准备开始。2. 环境准备下载安装与汉化2.1 TortoiseSVN 下载认准官方渠道下载 SVN 客户端我强烈建议只认准官方地址TortoiseSVN 官网是tortoisesvn.net打开后页面会有下载入口一般会提供 Windows 64 位和 32 位两个版本的安装包注意看清楚自己系统是哪种架构现在大多数电脑都是 64 位。这里有一个很关键的点不要在任何第三方下载站下载“SVN安装包”。网上一搜“svn下载”出来的很多都是捆绑了全家桶或者版本很老的推广站踩过坑的人都懂。宁愿去官网慢慢下也别贪图那几分钟的快。另外如果你用的是 macOSTortoiseSVN 不支持Mac 上可以选择自带命令行 svn苹果系统自带 SVN 客户端但新版会要求你装 Command Line Tools或者用 Cornerstone、SmartSVN 这类图形工具。Windows 用户就认准 TortoiseSVN 加中文语言包这一个组合基本能覆盖绝大部分需求。2.2 安装 TortoiseSVN 的完整步骤下载得到的是一个.exe文件比如TortoiseSVN-1.14.x-x64.msi双击开始安装。安装过程比较傻瓜一路 Next 即可但我建议在出现“Custom Setup”这一步时稍微注意看一下。里面有一项叫command line client tools默认是不安装的。这个东西的作用是给 SVN 提供命令行工具也就是svn.exeIDEA 集成 SVN 的时候需要用到它。所以安装到这步时把这个组件从Entire feature will be unavailable改成Will be installed on local hard drive也就是把它装上。装完之后右键任意文件夹菜单里应该会出现SVN Checkout、TortoiseSVN等选项。如果右键菜单没出来先注销再重新登录一次系统或者重启一下资源管理器菜单一般就出来了。另外安装过程中可能会提示需要系统重启按照提示操作就行。2.3 中文语言包安装与语言切换TortoiseSVN 默认是英文界面对英文不好的朋友很不友好所以绝大多数人都会装中文语言包。这里有个容易踩的坑语言包的版本必须和主程序版本完全一致否则装不上。也就是说如果你装的是TortoiseSVN-1.14.6那语言包也必须下载Language Packs-1.14.6对应的简体中文包文件名字大概叫LanguagePack_1.14.6-x64-zh_CN.msi。下载地址还是在官网下载页面的语言包区域名称一般是Chinese Simplified。语言包的安装很简单双击一路 Next 完成安装。接下来就是关键操作在任意文件夹空白处点右键 →TortoiseSVN→Settings在左侧找到Language右侧下拉框选择中文(简体)确定后界面立刻会变成中文。如果设置完还是英文关掉所有资源管理器窗口或者注销重新登录一次。我见过有人装完语言包后在控制面板里找汉化配置其实入口从来不在控制面板而是在 TortoiseSVN 自己的 Settings 里记住这一点就够了。2.4 在 IntelliJ IDEA 中集成 SVN如果你平时用的是 IDEA 开发那还需要在 IDEA 里配置一下 SVN 客户端路径。IDEA 本身自带 SVN 支持但它需要知道svn.exe在哪里。打开 IDEA进入File→Settings→Version Control→Subversion找到Path to svn executable点击右侧文件夹图标选择刚才安装 TortoiseSVN 时生成的svn.exe路径。如果你没有勾选 command line client tools这个路径大概率是空的那就要重新运行 TortoiseSVN 安装包选择Modify补装上命令行工具组件。配置好之后IDEA 里的 VCS 菜单就能正常识别 SVN 了。还有一个细节如果你在 IDEA 里打开了一个从 SVN 检出的项目但文件状态一直显示version not under control多半是 IDEA 没有正确识别到版本控制根目录后面问题排查部分会详细讲。3. 拉取远程代码从零开始把项目弄到本地3.1 Checkout 前必须搞清楚的三样东西拉取远程代码在 SVN 里叫Checkout检出。执行这个操作之前你需要确认三个信息仓库地址Repository URL格式一般是https://192.168.1.100/svn/project/trunk或svn://192.168.1.100/project。注意访问协议不一样常见的有svn://、http://、https://、svnssh://这几种。如果你是团队里的新人直接找组长要打包好的地址别自己瞎猜。账号和密码通常由管理员分配注意 SVN 的权限是挂在账号上的不是随便一个账号都能看到所有目录。检出到本地的目标目录建议单独建一个干净的目录比如D:\workspace\project不要检出到已有项目的根目录里否则容易混入无关文件。记住SVN 的 Checkout 不仅会把远程文件下载下来还会在本地目标目录生成一个隐藏的.svn文件夹。这个文件夹就是 SVN 的“身份证”以后每次操作都会根据它来判断文件和仓库之间的关系。你拿到代码后dir一下可能会觉得怎么多了个文件夹不要删它删了本地副本就等于“失联”了。3.2 使用 TortoiseSVN 检出代码的实操在你要存放代码的文件夹里点右键 →SVN Checkout弹出对话框。在URL of repository一栏填入远程仓库地址Checkout directory会自动填上你所在的目录一般不用改。接下来有四个选项需要留意Revision默认是HEAD revision也就是拉取最新版本。如果你是第一次拉代码用默认就行。如果你需要拉某个历史版本比如线上在跑的旧版本可以选Revision并填写具体版本号。Depth默认Fully recursive即完整递归拉取所有子目录。不要改成Only file children或者Immediate children否则会漏文件。Omit externals如果项目里有外部引用svn:externals 属性默认不勾选即可会一并拉取。Repository Browser如果你连地址都不确定可以先点这个按钮输入仓库根地址后浏览仓库目录结构然后再选择要检出的子目录。填好之后点OK第一次连接通常会弹出认证对话框输入账号密码。这里有个小技巧建议勾选Save authentication这样下次就不用再输了。不过如果在公网环境或者共用电脑上安全起见可以不保存。等待进度条走完后目录里就会出现代码文件而且每个文件或文件夹右下角都会有一个绿色的小对勾图标表示“已版本控制且状态正常”。如果没看到绿色图标先刷新一下资源管理器或者确认是不是把检出目录选错了。3.3 在 IDEA 里检出远程代码的操作路径有些人习惯先打开 IDEA再从 IDEA 里直接检出项目代码。这也是非常常见的使用方式。打开 IDEA 到欢迎界面点击Get from VCS左侧选择Subversion如果左侧列表里没有 Subversion说明 IDEA 的 SVN 插件被禁用了需要到Settings→Plugins里把 SVN 相关的插件勾选启用后重启。填写Repository URL点Checkout。之后 IDEA 会弹出一个确认对话框让你选择检出的代码保存到哪个目录、是否创建新窗口打开。选择好之后IDEA 会下载代码并自动识别项目结构如果是 Maven 项目右下角会提示加载 Maven 工程顺手点一下让依赖导入。这里有个体验上的差异值得一提IDEA 自带的 SVN 支持文件状态图标非常直观新增的是绿色、修改的是蓝色、删除的是灰色一眼就能看清本地改了哪些文件。不像 TortoiseSVN 只有两种状态覆盖图标对很多习惯了 IDEA 的人来说直接在 IDEA 里搞提交反而更顺手。3.4 检出后先别急检查两件事代码拉下来之后不要立刻埋头写代码先花一分钟检查两件事第一确认本地文件状态正常打开任意一个文件看看是不是“真源码”而不是空壳或者乱码第二确认你能看到.svn隐藏文件夹在资源管理器地址栏输入%APPDATA%之类的地方看也行或者直接看目录下有没有一个名为.svn的文件夹。如果文件拉下来后图标全是蓝色的感叹号或者问号说明状态异常。右键执行一下SVN Update或者TortoiseSVN→Cleanup把一些临时锁文件清掉再看状态是否恢复正常。这个细节很多人会忽略等到提交的时候才发现各种怪问题。4. 提交本地代码把改动安全推回仓库4.1 提交前的第一原则先 Update 再 Commit写代码写得很嗨改完了准备提交先按住自己的手在 Commit 之前一定要先 Update 一次。这不是走形式而是要遵守集中式版本控制的“先后顺序”。原因很简单SVN 是集中式仓库。你本地改代码的时候别人可能往仓库里提交了新的改动。如果你不更新直接提交SVN 服务器会把你提交的内容和仓库最新版本做合并一旦你们改了同一个文件的同一块区域就会产生冲突而且这种远程冲突处理起来比本地冲突麻烦得多。先 Update 的意义在于本地先把别人的新改动合并进来如果冲突就在本地解决掉解决完再提交干净利落。所以养成习惯每次提交之前右键 →SVN Update确认没有冲突了再提交这是 SVN 用户最基本的职业素养。4.2 TortoiseSVN 提交的完整操作流程选中需要提交的目录或文件右键 →SVN Commit弹出提交对话框。这个对话框会把本地所有修改列出来。第一步逐项勾选需要提交的文件。不要无脑全选尤其注意那些配置类文件和自动生成的文件。比如 IDEA 项目的.idea/workspace.xml、Java 项目的target目录都不应该提交。勾选的意义在于你可以在提交之前精确控制“这次提交什么、不提交什么”。第二步填写提交信息Message。很多人草草写一个“update”或者“修改”其实好的提交信息应该能让人一眼看出这次改了什么比如“修复登录接口空指针异常”“优化首页加载速度”。团队协作时提交历史是重要的排查资料写好 message 是对自己负责也是对以后的自己负责。第三步点OK等待提交进度条走完。如果提交成功会弹出一个结果面板显示提交的版本号比如Revision 128 committed。如果提交失败面板里会给出原因最常见的就是文件冲突这种情况看下面的问题排查部分。这里再提一个容易踩的坑在“父目录”上右键提交时提交列表里面显示的是一整个文件夹下所有改动的文件如果你只需要提交其中一个文件别点“全部勾选”而是先全选再取消不需要的文件或者直接切换到文件所在的目录去提交。4.3 IDEA 里提交代码的操作差异如果你在 IDEA 中操作提交流程会更紧凑。IDE 底部有一个Commit选项卡会实时显示本地所有变更文件点击后可以查看每个文件的 diff确认无误后再提交。提交快捷键是CtrlKWindows。IDEA 提交之前同样建议先执行Update Project快捷键CtrlT。IDEA 里 Update 默认会拉取远程变更并尝试合并如果合并有冲突会弹出一个冲突列表让你逐个解决。提交窗口里有一个Commit Message字段写清晰再点右下角的 Commit 按钮。注意IDEA 的提交按钮边上有个下拉箭头可以选择Commit只提交到本地暂存区不对SVN 没有暂存区——实际上 SVN 模式下提交就是直接提交到远程仓库IDEA 只是把过程做得更平滑。如果你在 IDEA 提交时发现文件根本不显示在变更列表里先检查这个文件是不是被 Mark as Ignored或者是否没有加入版本控制。可以右键这个文件 →Git不对是Subversion→Add to VCS让 SVN 先接管这个文件。对于新项目刚检出来的时候所有新创建的文件在提交前都必须先Add否则 SVN 视而不见。4.4 忽略规则别把垃圾文件推上仓库SVN 提交垃圾文件是新手最常见的问题。被提交上去的往往包括编译输出目录如target、build、dist、IDE 配置目录如.idea、.settings、.project还有各种本地环境变量文件。这些东西每台电脑都不一样强制提交上去后别人拉代码下来还得手动改非常麻烦。比较规范的做法是在项目根目录配置忽略规则。SVN 有一个svn:ignore属性可以在仓库目录上设置忽略项。用 TortoiseSVN 操作的话右键项目根目录 →Properties→New→Other在Property name里选svn:ignore然后在Property content中填写要忽略的文件名或目录名每行一个比如target .idea *.iml .DS_Store设置完成后提交这个svn:ignore属性变动。这样其他同事拉取代码过来的时候SVN 就会自动忽略这些路径不会再出现“提交了一大堆 target 目录”的惨案。如果你只是想在自己电脑上忽略某些文件不让它出现在提交列表里也可以在 TortoiseSVN 设置里的Ignored Files中添加全局忽略模式。全局忽略和仓库级忽略的区别是全局忽略只对你自己生效repo 级忽略对整个项目生效。设置忽略之后文件依然会存在磁盘上只是 SVN 不再理会它们。5. 常见问题与排查技巧实录5.1 无法连接仓库unable to connect 与 forbidden这个报错绝对是 SVN 用户遇到频率最高的问题热搜词里也是五花八门。典型的报错信息是Unable to connect to a repository at URL https://svnserver/svn/project或者带一句Access to /svn/ forbidden。遇到这种情况按以下顺序快速排查检查 URL 是否正确最常见的是 http/https 混淆、域名输错、端口遗漏、路径少了/svn前缀。你可以先用浏览器输入这个 URL如果浏览器能弹出登录框并进入仓库界面说明 URL 没毛病如果浏览器都打不开先确认网络和地址。检查网络连通性在你电脑上 ping 一下 SVN 服务器地址看能不能通。如果是外网 SVN确认是否在公司内网环境访问外网访问不了内网资源很正常。检查账号权限Access to /svn/ forbidden这个提示最常见的不是密码错而是当前用户对该路径没有访问权限。SVN 服务端可以配置每个用户或每个用户组只能访问特定目录。比如你是新入职的实习生管理员只给了你一个子项目的读权限那你去访问仓库根目录就会 forbidden。检查 SSL 证书如果 SVN 服务器用的是自签名证书TortoiseSVN 首次连接时会弹出证书确认窗口点击信任即可。如果你装了某种环境导致证书校验失败可以在 TortoiseSVN 设置中暂时关闭证书校验但不建议长期这样。还有一个细节有时候 Git 能用而 SVN 连不上其实是因为端口被防火墙挡了。SVN 默认端口是 3690svn 协议如果是 HTTP 访问则走 80 或自定义端口。检查本地防火墙和公司网络策略。5.2 提交代码看到的冲突怎么解决项目多人协作冲突是迟早的事。SVN 里冲突的表现形式是在你Update或者Commit时提示某些文件冲突。冲突之后文件图标会变成一个黄色感叹号。解决冲突的姿势我推荐用 TortoiseSVN 自带的三方合并界面右键冲突文件 →Edit conflicts会打开一个窗口左侧和右侧各显示两版本的内容中间是合并结果。你要做的事很简单把中间区域的内容调整成最终想要的样子保存后点击Mark as resolved。如果冲突只是几行的小变动直接手动打开文件找到类似 .mine、、 .r123这样的冲突标记把不需要的部分删掉保留自己需要的也是可以的。处理完之后记得右键文件 →TortoiseSVN→Mark as resolved告诉 SVN“这个冲突我搞定了”否则提交会被拒绝。这里分享一个我自己的经验遇到冲突别急着硬改建议先看一眼对方的改动和自己的改动如果都是合理修改可以两个都保留如果对方是完整重写了一个方法而你又只加了注释那果断用对方的版本再手动把注释加回去。还有一些时候你只是改了个缩进对方改了大段逻辑那直接Resolve选 theirs 就行别做无谓的挣扎。5.3 文件状态显示 version not under control 怎么处理这个报错在 IDEA 里很常见实际提示类似File is not under version control或version not under control。原因一般有两种第一这个文件是新添加的还没执行Add to VCSSVN 目前只是在磁盘上看到了它但版本库还没有这个文件第二SVN 本地元数据损坏原本受控的文件突然失去了版本关联。第一种情况好办右键文件 →Subversion→Add to VCS然后提交即可。第二种情况就比较头疼常用解决手段是先对项目根目录执行TortoiseSVN→Cleanup把本地工作副本的锁和元数据状态清理干净然后再在 IDEA 里右键项目 →Reload from Disk。如果还不行看看是不是目录层级错了比如项目明明是从https://xxx/svn/project/trunk检出的你又把trunk目录上层的父目录也手动复制了一份出来那文件自然“not under control”。还有一个比较坑的场景用 IDEA 打开别人发过来的压缩包解压后的代码而不是从 SVN 检出的代码。这种情况下因为这个目录里根本没有.svn文件夹IDEA 根本识别不了自然全是 not under control。解决办法只有重新 checkout 一次。5.4 SVN 回滚到指定版本的两种方式SVN 没有 Git 那种reset命令回滚操作理解起来会绕一点。但回滚的需求是绕不开的比如发布了新版本结果线上出问题需要立刻把代码回到旧版本。第一种方式Update to Revision。右键文件或目录 →TortoiseSVN→Update to Revision输入目标版本号。这个操作是把本地工作副本的内容替换成目标版本适合临时查看旧代码、调试问题。但它只影响你自己的本地副本不会影响远程仓库。如果你把这个状态直接提交实际上是把旧代码作为新改动提交上去也能达到回滚效果但提交历史里会多一条反向修改记录。第二种方式反向合并。右键 →Show Log在提交历史中找到需要撤销的那次提交右键 →Revert changes from this revisionSVN 会生成一个与该提交完全相反的改动并应用到你本地。比如那次提交删除了三行代码这个操作就会把这三行加回来。然后你再 commit就相当于把这次提交“抹掉”了这种方式更正规也保留了完整的操作记录。这里特别提醒SVN 里的Revert和 Git 里的Revert概念不一样。SVN 菜单里的Revert是撤销本地尚未提交的修改不是回滚远程已经提交的内容没办法直接“撤回”必须通过反向合并的方式来纠正。我见过不少新手误点了 Revert把自己改了半天还没提交的代码全给抹掉了欲哭无泪所以操作之前一定要看清状态。5.5 提交后后悔了还能不能补救如果你提交之后马上发现“坏了这次改动有问题”在别人还没有拉取这个版本之前其实还有补救窗口。最快的方式就是按上面说的反向合并把这次提交的改动撤销掉然后立刻 commit 一个新版本。但如果别人已经 Update 了你的版本甚至在你提交的基础上又做了修改这时候反向合并就容易和其他人的改动产生冲突处理起来比较麻烦。所以真实团队协作中建议提交前多花一分钟检查 diff能避免大部分后悔的情况。说到底SVN 的灵活性不如 Git但也正因如此它的操作路径更加线性、可预测。只要把 update 和 commit 的纪律遵守好代码管理这块基本不会出什么大乱子。我个人在实际操作中最深的体会是SVN 问题十有八九不是工具不行而是操作顺序不对。拉代码的时候没注意 URL提交的时候不先更新遇到冲突就想删了重来这些才是真正的坑。工具只是工具理解它背后的集中式版本控制逻辑比背一百个快捷键都管用。希望这篇教程能让刚接触 SVN 的你少走点弯路。