
1. 先搞懂SVN是什么再决定要不要装SVNSubversion是一个集中式版本控制系统核心思路就是“一个中央仓库所有人往里面交代码”。跟Git那种分布式模型不同SVN的每个操作几乎都要跟服务器打交道所以服务端稳定性和权限控制能力就特别重要。我带过几个项目组从Git切回SVN的情况也遇到过。团队里如果有大量非技术角色策划、美术、文档协同SVN的学习成本明显更低。很多游戏公司、外包公司、传统软件企业到今天仍然在用SVN不是因为它潮而是因为它“够用、好管、权限清晰”。VisualSVN-Server是Windows环境下最省心的SVN服务端实现。装好之后不用写一行配置命令界面点点点就能完成仓库创建、用户管理、权限分配。它的底层是Apache Subversion但把复杂度全包住了所以特别适合刚入门的人。这篇笔记我会从零开始把VisualSVN-Server的安装、仓库创建、用户配置、客户端接入、IDE集成、常见问题排查全流程讲一遍。所有操作我都在自己的Windows机器上实测过按着走基本不会踩坑。2. 安装前的三个思考和两个准备2.1 为什么选VisualSVN-Server而不是原生SubversionWindows上装SVN服务端有几条路直接装SlikSVN命令行版、自己配Apache加载mod_dav_svn模块、用VisualSVN-Server这种集成包。纯命令行版本对新手不太友好你得手动敲命令创建仓库、配置httpd.conf一个空格错了服务都起不来。自己配Apache就更折腾了先装Apache、再装Subversion、还要改配置、设权限没有一两个小时下不来。VisualSVN-Server把所有繁琐环节都封装了。安装过程中自动帮你装好Apache、Subversion、配置好服务、创建好默认仓库目录安装完就能用。而且自带一个管理控制台仓库、用户、权限全是图形化操作。对入门者来说这是Windows下最稳妥的选择。2.2 版本选型与网络环境注意我用的词是“网络环境”而不是“软件版本”。VisualSVN-Server目前新版本5.x以后默认只支持HTTPS连接安装包体积也大不少。老项目的客户端可能只支持HTTP协议这时候就需要选4.x版本。下载的时候我建议去官网的下载页面选Standard版免费就够了。企业版多出来的那些功能比如AD域集成、多仓库备份策略在小团队场景下用不到。官网下载时可能需要填一个邮箱地址随便填一个能收到链接的就行下载链不会绑定邮箱填完立刻能下载。安装前需要确认三件事操作系统是Windows 7以上64位系统优先磁盘空间至少留出1GB给服务端本体仓库目录另算80或443端口没被IIS或其他Web服务占用安装时也可以自定义端口2.3 安装包的下载路径选择官网地址是visualsvn.com下载页面里找到VisualSVN-Server的下载入口。页面会根据你的系统自动推荐安装包也可以手动切换32位或64位版本。下载完成后是一个msi格式的安装程序大约100MB左右。从官网下载速度如果很慢可以找国内镜像站下载但一定要对比文件哈希值是否和官网一致。这一点很重要开发工具类软件就怕被篡改。3. VisualSVN-Server安装全流程实录3.1 安装向导的每一步说明双击安装包后第一个界面是欢迎页直接点Next。接下来是License授权页面选择“I accept the terms of the license agreement”之后点Next。然后会进入安装组件选择界面这一步需要注意。有一个选项叫“Subversion command line tools”默认是不勾选的。强烈建议勾上因为这个工具集包含了svnadmin、svnlook这些命令行工具后面做仓库备份、维护、排查问题都要用到。下一步会要求选择安装路径和仓库路径。这两个路径建议分开设置放在不同的物理硬盘或者至少不同的目录下。我就见过有人把仓库路径和程序路径都放在C盘结果系统崩溃后什么都没了。个人建议程序装在D:\VisualSVN-Server仓库放在D:\Repositories这样的独立目录。然后是Network配置页面最关键的是端口选择。默认使用8443端口以HTTPS方式工作如果你没有冲突需求就直接点Next。用8443而不是443的好处是不会被IIS或其他Web服务占用也不会因为防火墙对88端口之类的特殊限制出问题。3.2 等待安装的这几十秒里发生了什么点击Install之后安装程序会在后台完成这些事情解压Apache和Subversion相关的二进制文件到安装目录注册一个Windows服务名字一般是VisualSVN Server生成自签名SSL证书如果是HTTPS模式创建默认的仓库根目录和conf配置文件配置防火墙入站规则放行你选择的端口这个过程一般1到2分钟就完成了。如果进度条卡在一个地方不动超过5分钟可能是杀毒软件在扫描安装文件。这个时候把杀毒软件对安装目录的实时监控暂时关掉再重新跑一次安装程序。安装完成之后最后一个界面会有一个“Create initial repository”的勾选选项默认是选中的会创建一个名为“Repositories”的示例仓库直接保留这个勾选完成安装后可以用来做连接测试。3.3 安装后的首次启动和验证安装完成后桌面上会出现两个快捷方式“VisualSVN Server Manager”和“VisualSVN-Server”。打开VisualSVN Server Manager会看到窗口左边是服务器节点展开后能看到Repositories、Users、Groups三个分类。右边会显示服务器的基础信息包括版本号、仓库路径、服务器状态运行中。此时可以做一个最简单的验证找一台同一局域网内的电脑浏览器输入https://服务器IP:8443/会弹出一个SSL证书警告因为用的是自签名证书选择“仍然继续”就能看到SVN的欢迎页面。看到这个页面说明服务端已经OK了。提示自签名证书的警告会一直在因为这不是由受信任的CA机构颁发的证书。如果你觉得每次都要点一下很烦可以在客户端电脑里安装VisualSVN-Server生成的证书文件把它导入到系统“受信任的根证书颁发机构”里面警告就消失了。证书文件位置在安装目录下的cert子目录里。4. 核心配置创建仓库、用户和权限4.1 创建第一个代码仓库的正确姿势在VisualSVN Server Manager左侧右键点击Repositories选择Create New Repository会进入仓库创建向导。Repository Name建议用项目代号或者模块名比如“ECommerceAPI”。这一步需要想清楚因为仓库名称会直接出现在访问URL中后续要修改名称比较麻烦会改动所有客户端的相对URL。选择仓库类型时有两种Empty空仓库和Single-project单项目仓库。Single-project会在仓库根目录下自动创建一个trunk、branches、tags三个标准目录结构。我强烈建议选择Single-project这样从第一天起就养成规范的分支管理习惯不用后面再来补目录。仓库创建完成后右侧面板会显示仓库的访问URL。默认是https://主机名:8443/svn/ECommerceAPI/后面的svn/前缀是VisualSVN-Server的HTTP路径前缀不要动它。4.2 用户和用户组的创建逻辑在Users分类下可以添加用户。创建用户时只需要填用户名和密码不需要填真实姓名和邮箱。用户名建议用员工工号或者英文拼音。密码方面VisualSVN-Server在5.x版本会强制密码复杂度策略要求至少6位且包含字母和数字这个限制可以在服务器属性里关闭。实际工作中我建议这样做给每个人都创建独立账号不要所有人共用一个账号。这样做的原因很直接——出现代码问题的时候提交日志里能看到是谁提交的方便回溯。Groups分类下可以创建用户组。组名的设置建议按项目或者按角色来分比如“ECommerceTeam”表示项目组成员“AdminGroup”表示管理员。把用户加入组之后权限控制就变得特别简单只需要给组赋予权限不需要一个个用户去设置。4.3 路径级权限控制这是SVN最值钱的功能在仓库上右键点击Properties打开权限配置窗口。默认状况下只有管理员也就是安装时创建的admin用户有读写权限其他人都没有任何权限。权限配置的核心是“路径级控制”就是说你可以精确到目录的级别来控制谁能访问、谁能修改。举个例子仓库ECommerceAPI下面有trunk、branches、tags三个目录。你可以配置成ECommerceAPI/trunk/所有开发人员可读写ECommerceAPI/branches/feature-xxx/只有该特性的负责人可读写ECommerceAPI/tags/所有开发人员可读但只有管理员有写权限标签不能随意修改配置方式就是先选择左边路径比如仓库根目录下的某个目录然后在右边勾选对应的用户或组权限。权限有三个等级No Access不可访问Read Only只读Read / Write读写一个常见的踩坑点在这里假设某个用户对仓库根目录是“No Access”但对/trunk目录设了“Read / Write”最终效果是用户仍然无法访问trunk因为SVN的权限继承规则是从根目录往下逐级判断的如果有任何一级检查不通过就会被拒绝。解决方案对仓库根目录按组去控制开发人员的组在根目录给“Read Only”然后对具体子目录单独放开“Read / Write”。这样根目录有只读权限子目录有完全权限逻辑是最顺的。5. 客户端接入TortoiseSVN安装与汉化5.1 小乌龟TortoiseSVN的安装细节服务端配好了接下来就是客户端安装。Windows上最经典的SVN客户端是TortoiseSVN因为图标是一只小乌龟大家习惯叫它小乌龟。官网下载的时候注意32位和64位版本必须跟操作系统位数一致。还有一个小细节TortoiseSVN的主程序只支持英文界面简体中文是独立的中文语言包。所以实际上你需要下载两个文件TortoiseSVN-x.x.x-x64.msi主程序TortoiseSVN-LanguagePack-x.x.x-x64-zh_CN.msi中文包先装主程序再装语言包。安装语言包完成后在桌面空白处点右键找到TortoiseSVN - Settings打开设置窗口在Language下拉框里选择“中文简体”确定后重开右键菜单就是中文了。提示必须严格匹配主程序和语言包的版本号。比如主程序是1.14.6那语言包也必须是1.14.6。版本不一致会导致语言包无法安装或者安装了也不生效。5.2 把远程仓库拉到本地SVN Checkout安装好客户端之后找一个空文件夹这个文件夹就是你的“工作副本”。右键 - SVN Checkout在弹出的窗口里填入仓库的URL比如“https://192.168.1.100:8443/svn/ECommerceAPI/”Checkout directory如果你是右键在文件夹里操作的会自动填上。如果连的是自签名证书的服务器第一次会弹出一个证书确认框选择“永久接受”即可。如果出现“Server certificate verification failed”并且按钮是置灰的一般是因为证书有效期问题或者主机名不匹配这个我在后面的问题排查章节细说。Checkout成功之后文件夹里的文件会带上绿色对勾的角标表示这些文件和服务器上的版本是一致的。5.3 日常操作提交、更新、冲突处理后面日常开发中你只需要记住这三个操作SVN Update从服务器拉最新代码到本地。开始写代码之前先更新一下这是SVN玩家的基本素养。SVN Commit把本地修改提交到服务器。提交前先右键查看Diff确认改的都是该改的然后在提交信息里写清楚改了什么。SVN Check for modifications查看本地工作副本相对于服务器的改动情况。这个功能很好用能看到哪些文件被修改了、哪些是新加的、哪些被删除了。会遇到一个经典问题冲突。两个人同时改了同一个文件的同一个地方先提交的人成功后提交的人更新时会看到“conflicted”状态。这时候不要慌TortoiseSVN会在冲突文件旁边生成三个临时文件文件名带mine、r数字等后缀双击冲突文件会弹出合并工具你手动选择保留谁的代码。我个人的建议是更新代码时养成看颜色的习惯。红色感叹号表示文件被修改了黄色感叹号表示有冲突灰色对勾表示没有变化。每天到岗第一件事先右键SVN Update下班前SVN Commit就不会出大问题。6. 与IDEA集成在IntelliJ IDEA里配置SVN6.1 IDEA配置SVN客户端路径用IDEA开发的Java程序员不能用小乌龟做主力因为小乌龟的命令行操作IDE不认。IDEA集成SVN的方式是通过命令行客户端所以在IDEA里使用SVN之前必须先装一个SVN命令行工具。这里有个坑TortoiseSVN从很早的版本开始就不带命令行工具了。所以你需要单独安装一个SlikSVN或者CollabNet的SVN命令行版本。我常用的是SlikSVN下载后一路Next安装。装好后打开IDEA设置File - Settings - Version Control - Subversion找到“Use command line client”一项后面有个浏览按钮选择到sliksvn安装目录下的bin目录里的svn.exe。比如C:\Program Files\SlikSvn\bin\svn.exe。配置完成后点击OK。如果IDEA右下方出现一个提示“Subversion integration is enabled”就说明配置成功了。6.2 IDEA中拉取项目并管理提交在IDEA里拉取SVN项目File - New - Project from Version Control - Subversion输入仓库URL选择本地存放目录点击Checkout即可。项目打开后IDEA会自动识别版本信息文件颜色会变成绿色新增、蓝色修改、灰色删除。这些颜色在Setting - File Colors里可以自己调。提交代码的时候右键项目或文件选择Subversion - Commit ChangesIDEA会列出所有修改的文件输入提交信息后点击Commit。有一点要特别注意IDEA的Enable/Disable启用/停用SVN按钮在Version Control工具栏里。如果项目没有被自动识别为SVN项目可以在顶部的VCS菜单里选择Enable Version Control Integration然后选择Subversion。6.3 IDEA里SVN的日常操作小习惯IDEA里最常用的几个图标蓝色向下箭头更新文件绿色向上箭头提交文件钢笔图标Show Diff查看文件差异实际工作中我习惯先CtrlK调出提交框但已经足够用了。提交之前先用右上角的“分栏显示”模式看一下Diff确认没有把不该提交的配置改进去。还有一个技巧IDEA里修改的文件如果同时在外部小乌龟里做了操作最好在IDEA里同步一下。它们之间偶尔会因为缓存问题出现状态显示不一致刷新或者重新打开项目可以解决。7. 常见问题与排查技巧实录7.1 连接失败SSL证书报错这是最最常见的问题症状是第一次访问SVN服务器时客户端或者浏览器提示证书不受信任。原因VisualSVN-Server默认使用自签名证书不受外部CA信任。解决办法有两个路径路径一推荐如果是内网固定环境在TortoiseSVN首次连接时选择“永久接受”Permanently accept浏览器里选择“仍然继续”IDEA里点击“Proceed”。基本都是一次性操作以后不会再问。路径二严谨方案把服务器的证书导出在客户端电脑上双击导入到“受信任的根证书颁发机构”。具体操作是打开VisualSVN Server Manager右键服务器选Properties找到证书那一栏点“View Certificate”然后切换到“详细信息”选项卡点“Copy to File”导出成cer文件。拿到客户端电脑上双击安装位置选“本地计算机”存储区域选“受信任的根证书颁发机构”。7.2 权限配置好了用户还是没权限这个我也碰到过明明在仓库权限窗口里对某个用户设置了“Read / Write”但用户访问还是提示没有权限。排查顺序是这样的先看用户是否在同一个仓库的其他路径上有“No Access”设置。SVN权限是逐级匹配的根目录或者父目录的No Access会覆盖子目录的所有权限。把父目录权限先改成Read Only再在子目录单独设置。再看仓库属性里的“Repository access”界面确认是否勾选了“All users have read access”之类的全局选项。有时候全局选项和具体权限设置互相冲突。最后看用户是否被误加入了某个权限更高的组不同组之间也可能产生权限叠加的冲突。右键用户查看属于哪些组然后逐组排查。7.3 工作副本状态显示异常文件明明没有修改但图标显示成红色感叹号Modified或者文件改了但仍然显示绿色对勾。这种情况通常是因为TortoiseSVN的文件状态图标Icon Overlay被其他软件干扰了。Windows系统的图标叠加最多支持15个如果装了很多网盘软件OneDrive、坚果云、Dropbox可能把SVN的图标挤掉了。解决办法右键 - TortoiseSVN - Settings - Icon Overlays把“Show overlays for network drives”和“Show overlays on shell context menu”都勾上如果还是不显示考虑卸载不常用的云盘软件最彻底的办法是使用TortoiseSVN的“Refresh”右键菜单里强制刷新状态7.4 一台电脑同时用SVN和Git的共存体验很多开发者的电脑上会同时装小乌龟TortoiseGit和小乌龟SVNTortoiseSVN。这两个工具兼容性其实还不错右键菜单会有各自的选项不会互相干扰。唯一需要注意的是不要在同一个工作目录上同时初始化SVN和Git两个版本控制系统的管理文件会互相污染轻则状态显示错乱重则文件被误删。正确做法是一个项目用一种版本控制仓库目录不要嵌套。如果公司里既有SVN项目又有Git项目把两个项目的本地工作目录分开互相不交叉。8. 关于SVN使用的几点经验和体会做版本控制最重要的不是工具本身而是团队的使用习惯。SVN的集中式模式天然适合“中心是唯一真理”的项目管理。它比Git容易上手的地方在于你不用理解“分支”和“合并”在分布式环境下的复杂度。SVN的分支本质上是目录拷贝创建和合并的思维模型都非常直观。我用SVN管项目这几年最大的体会是权限控制的必要性。可以精确到某个配置文件只允许指定的人修改这在跟外包团队或者跨部门协同的时候帮了大忙。团队里有几个误删过公共代码的开发在SVN的权限控制面前这种事故基本能被堵住。从跟队经验来看新人加入SVN项目的适应时间通常是半天而加入Git仓库项目需要两到三天。如果你是带项目的人团队成员以非纯程序员为主SVN仍然是提高协作效率的理性选择。最后分享一个小技巧在做关键节点比如发版前的时候建议给仓库打个Tag路径是右键trunk目录选择Branch/Tag操作把trunk的内容复制到tags/v1.0.0。以后不管怎么改都能随时回滚到发版那天的代码。这个习惯配合SVN的集中式备份能让项目长期运行不出大乱子。