ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

TortoiseSVN 使用完全指南:从安装、检出到合并回退

TortoiseSVN 使用完全指南:从安装、检出到合并回退 前阵子组里来了个新同事看到我电脑上的 TortoiseSVN第一反应就是“这玩意不是早淘汰了吗”。结果没两周他接手了一个维护多年的老项目服务器上跑的还是 SVN仓库里堆了几千个版本记录他光研究怎么把某个指定旧版本拉下来就折腾了一下午。这个场景我觉得特别典型。所以我想写一篇真正能直接照着操作的 TortoiseSVN 使用记录。它不是一个被时代抛弃的工具而是集中式版本管理在 Windows 上最顺手的客户端。不管你是刚接手老项目、被项目组要求统一用 SVN还是需要给产品、策划这类非程序员同事做基础培训这篇文章都值得花十分钟看完。下面写的内容全部来自实际项目里的操作经验从下载、安装、汉化到检出指定版本、合并、回退、排障每一步都有具体过程和为什么这样做。1. 为什么 Windows 上做 SVN 版本管理绕不开这只小乌龟1.1 它到底是个什么东西TortoiseSVN 是 Windows 平台上一款 SVN 图形客户端SVN 本身是集中式版本控制系统服务器上存一份完整的仓库和历史客户端通过 Checkout(检出)把仓库某个版本的代码拿到本地修改后再 Commit(提交)回服务器。TortoiseSVN 最大的特点是完全不依赖命令行它把自己集成进了 Windows 资源管理器里。安装之后你在任意文件夹、文件上点右键菜单里就会多出一堆和 SVN 相关的选项。它那个经典的小乌龟图标不光是好看文件状态就通过图标直观展示绿色对勾表示文件没有改动红色感叹号表示有本地修改黄色感叹号表示有过冲突蓝色加号表示新增文件。这就意味着哪怕是一个完全不懂版本管理原理的人也能通过眼睛看出自己当前改了哪些文件、哪些文件还没提交。我见过很多团队把 TortoiseSVN 称为“小乌龟”Windows 上几乎所有 SVN 操作都是由它完成的。它和 Git Bash、SourceTree 这类工具的体验很不一样它不搞独立界面而是直接融入你本来就天天在用的文件管理器。1.2 它和 Git 工作流的差异决定了哪些操作习惯要改很多人用惯了 Git刚切到 TortoiseSVN 时会很不适应因为两者的核心逻辑完全不同。Git 是分布式版本控制每个人在本地克隆一份完整仓库提交是先在本地 commit之后再 Push 到远端。SVN 是集中式本地只是一个工作副本你每次 Commit 都会直接提交到服务器没有“本地提交”这个中间缓冲层。这就带来两个直接影响。第一SVN 每次提交都等于全员可见改坏了别人一 Update 就会中招所以提交前一定要自己检查改动。第二SVN 的版本号不是按文件分别计算的而是整个仓库统一递增的数字。仓库的第 128 次提交就是一个对所有文件都生效的全局版本号这也让“检出指定版本”“按版本回退”这类操作变得格外直观。还有一个容易混淆的地方Git 里拉代码叫 Clone(克隆)SVN 里叫 Checkout(检出)。新同事如果带着 Git 的思维去找“克隆到指定版本”的选项很容易找不到。实际上你要找的就是 TortoiseSVN 右键菜单里的 Checkout在窗口里指定一个 Revision 版本号就行了。1.3 这篇文章能帮你解决哪些具体的场景我给这篇文章定位成“Windows 下使用 TortoiseSVN 的完整实操手册”主要覆盖这几类高频需求第一次安装小乌龟想知道从哪个官网下、用什么版本、怎么装中文包项目服务器上有老代码需要把仓库的某个指定版本、或者某个日期版本检出到本地日常要提交、更新代码遇到冲突也得自己处理而不是看到红黄图标就发懵要创建分支、合并分支、回退一个线上误操作装完之后发现图标不显示、认证信息报错、工作副本被锁等常见故障下面每一章都围绕这些场景展开不绕弯子。2. 官网下载到中文界面安装和汉化的完整落地流程2.1 版本对应关系这是第一步最常踩的坑TortoiseSVN 官网地址是tortoisesvn.net进入 Downloads 页面后会看到对应不同位数的最新安装包。这里第一个坑就是版本号对应关系。TortoiseSVN 的版本号和它内置的 Subversion 内核版本是绑定的比如 TortoiseSVN 1.14.9底层对应的就是 SVN 1.14.9。客户端版本最好和服务器端 SVN 服务版本大体匹配。比如服务器是 VisualSVN Server 5.x(内部 SVN 1.14.x)客户端用 TortoiseSVN 1.14.x 就没有任何兼容问题。如果客户端版本比服务器老太多有些新的命令服务器可能不支持操作时会直接报错。一般建议直接下载官网当前推荐的最新 1.14.x 版本大多数老仓库都能正常连。位数也要注意。官网会分开给 32 位和 64 位安装包现在绝大多数 Windows 都是 64 位系统但少数老电脑、或者公司统一发的 32 位 Win7 机器就得选 32 位包。判断方法很简单在系统设置里看系统类型。位数装错了语言包也要跟着错后面汉化时很容易出问题。可以在官网下载页找“Download”按钮它会跳到 SourceForge 的镜像站选一个离你近的镜像下载即可。如果你需要旧版本官网也有 Previous Versions 入口能找到比如 1.14.9、1.13.5 这类历史版本。这里提醒一句不要从第三方下载站拉安装包我见过不少同事从奇怪的小网站下载结果装完多出一堆全家桶TortoiseSVN 官网本身是免费的完全没必要冒险。2.2 安装过程的三个关键选项安装包下载后双击运行一路 Next 到组件选择页面时有三个选择值得认真看。第一个是安装位置。默认会装到C:\Program Files\TortoiseSVN我建议保持默认。因为 TortoiseSVN 升级频繁默认路径在后续覆盖安装时最省心装到 D 盘有时候反而会因为权限问题导致右键菜单失效。第二个是“Command Line Client Tools”。默认情况下这个组件是可选的很多人直接忽略。但我会强烈建议勾选安装。它会给你一个svn.exe命令行工具路径比如C:\Program Files\TortoiseSVN\bin\svn.exe。有了它你就可以在批处理脚本、Jenkins 任务里直接调 SVN 命令而不必依赖右键菜单。我当时就是靠它写了一个定时更新代码的脚本省了很多人力。注意勾选了这个组件之后安装完需要重启一下资源管理器或注销一次命令行工具才能正确写入环境变量这一步网上很少有人提。第三个是“Context Menu Entries”也就是右键菜单的显示条目。默认全选即可新手不要精简因为后面很多操作入口都藏在右键菜单里比如 Show Log、Blame、Branch/Tag。如果你嫌菜单太长等熟悉之后再进 Settings 调整。安装过程本身很快装完后不需要重启系统但建议注销一次再登录确保 Shell 扩展被 Windows 彻底识别尤其是老系统上经常出现“装完右键没有小乌龟菜单”的问题多半就是没有注销。2.3 语言包安装与切换汉化包必须和主程序版本完全一致TortoiseSVN 默认界面是英文对部分同事来说不太友好。汉化方式不是给你一个中文 exe 重新装而是额外安装一个 Language Pack 语言包。在官网 Downloads 页面往下拉能看到 Language Packs 区域里面列出了各个语言包的下载。注意关键原则语言包版本必须和主程序版本完全一致。比如你装了 TortoiseSVN 1.14.9就必须下载 1.14.9 的语言包装成 1.14.8 的语言包可能安装器会直接拒绝就算强制装上了界面上也会有大量英文残留。语言包装完不需要单独做任何配置这时候进入任意目录右键 - TortoiseSVN - Settings打开设置窗口。在左边的树里找到 General(常规)右边第一个参数就是 Language(语言)下拉选择“中文(简体)”。注意有的语言包会显示为“中文”和“中文(简体)”两个选项选简体那个。点击确定保存后你再打开任意右键菜单会看到“SVN 检出”“SVN 提交”“显示日志”这些中文选项说明汉化生效。如果切换语言后界面没有变化不要慌重启一下资源管理器即可。在任务管理器里找到“Windows 资源管理器”右键选择重启保持桌面不关闭的情况下Shell 菜单就会重新加载。2.4 安装和汉化之后的两个验证动作装完不要直接开始用先做两个简单验证能省掉后面很多麻烦。第一个验证右键菜单是否完整。在任意文件夹上右键看菜单里有没有“SVN Checkout”或“SVN 检出”。如果没看到可能在“Show more options”折叠菜单里这是 Windows 11 的一个问题。如果在完整菜单里依然没有大概率是身份认证插件或者右键菜单没有刷新重启资源管理器或注销一次就能解决。第二个验证命令行工具。打开 CMD 或 PowerShell输入svn --version如果弹出 SVN 版本号和一堆支持的服务端协议说明命令行工具已经就绪。如果提示“不是内部或外部命令”说明刚才没有勾选“Command Line Client Tools”或者环境变量没刷新重新运行安装程序选择 Modify勾上这个组件再装一次即可。3. 把代码拉到本地目录检出与指定版本下载3.1 最标准的检出流程SVN 的 Checkout 是把服务器仓库的代码首次拉到本地成为工作副本。操作方式很简单先在本地新建一个空目录(或者进入已有目录)右键菜单选择“SVN 检出”(英文是 SVN Checkout)。弹出对话框后需要填两个核心字段URL of repository(版本库 URL)填服务器仓库地址常见的有svn://192.168.1.10/svn/ProjectName和https://svn.company.com/svn/ProjectName两种格式前者走 SVN 协议后者走 HTTPS。不确定的就去问项目负责人或者从公司文档里复制。Checkout directory(检出目录)默认就是这个目录本身一般不用改。Repository 地址下面还有一个 Revision 区域默认是 HEAD Revision(即最新版本)。首次连接时通常就选这个默认行为没问题。点击确定后工具会弹出一个进度窗口下载过程中可能要求你输入服务器账号密码输入后可以选择“保存认证信息”以后就不需要重复输入了。我第一次检出的时候没注意那个“保存认证信息”的勾选框结果每次操作都弹账号密码窗口烦不胜烦。所以建议第一次连接时把复选框勾上密码不要输错否则后面缓存了错误的认证信息反而更麻烦。3.2 检出指定版本理解 SVN 的全局版本号很多人在热词里搜“小乌龟克隆到本地为仓库的指定版本步骤”本质就是这个场景项目已经在线上运行但现在要拉一个历史版本出来排查问题或者某个客户那边还跑着旧版本需要拿到当时的代码。SVN 检出的对话框里Revision 区域选择“Specific revision(指定版本)”后面的输入框就可以填版本号。比如你填 1200工具就会把服务器上第 1200 次提交对应的整仓文件状态拉到本地生成一个工作副本。仓库里所有文件的组合状态就是第 1200 次提交那一刻的状态这种全仓库统一版本号的机制比 Git 的 commit 哈希值直观很多。还有更细的玩法Revision 下拉框里可以选“Revision Range(版本范围)”输入比如1000-1200工具会拉取这个区间涉及变更的内容也可以选择日期检出在日期输入框填2024-05-01工具会把你指定的日期当天或之前最后一次提交的版本状态拉下来。需要特别提醒的一点检出旧版本后这个工作副本处于“低于 HEAD”的状态。如果你在旧版本基础上直接改代码并提交很可能因为代码变更和后续别人的提交有大量冲突提交难度非常大。所以我实际项目里的做法是先正常检出最新版本如果只是想看旧代码内容就在本地用“Export 导出”而不是检出。如果确实要基于旧版本开发那就在旧版本基础上创建一个分支别直接在主干的旧版本工作副本上硬改。3.3 导出不带版本信息的代码交付场景很实用和 Checkout 类似的还有一个功能叫“导出”(Export)。在目录上右键 - TortoiseSVN - Export同样选择版本库 URL 和本地目录它会把指定版本的代码全部下载下来但是完全不包含.svn隐藏目录。这有什么用当你要把代码交付给外包团队、客户或者运维打包时对方不需要版本管理信息只需要一份干净的源代码。Checkout 出来的目录会有.svn目录如果对方误操作提交反而可能污染仓库。我之前给一个客户发源码包就是用 Export 导出一份标准 ZIP压缩包干净利落对方拿过去直接就能编译。还有一个隐藏价值要用 TortoiseSVN 生成补丁文件时通常也需要一份干净的基线代码Export 出来的目录就是理想的材料。3.4 检出后工作副本的状态理解检出完成后你在目录里能看到.svn文件夹。很多老教程会说每个目录都有.svn但那个是 TortoiseSVN 1.6 及以前的行为。1.7 之后优化了整个工作副本只有一个根目录.svn里面保存了所有本地的版本状态信息。所以当你看到工作副本根目录下有一个.svn不要觉得奇怪也不要随手删掉它一旦被删整个工作副本就和服务器失去关联了。本地工作副本在检出时并不包含完整历史SVN 和 Git 不一样除了.svn里的一些元数据文件本体就是当前版本内容。所以想查看历史记录必须通过右键“显示日志”向服务器发起请求而不是在本地翻。4. 提交、更新与冲突处理日常开发的高频操作4.1 文件状态图标怎么看别把图标当成装饰从检出完成开始你会看到文件资源管理器里出现了各种状态图标。这些图标是 TortoiseSVN 最重要的信息入口我到现在都会刻意教新同事先看懂它们。常用状态包括图标含义对应操作绿色对勾本地文件与服务器版本一致没有修改不需要处理红色感叹号本地有修改还未提交需要 Commit黄色感叹号更新或合并时发生冲突必须手动解决蓝色加号新增文件还未加入版本控制需要 Add 后提交红色 X文件被删除或缺失确认后提交删除灰色图标被忽略未纳入版本控制不需要处理红色感叹号不一定代表“有问题”它只是提醒你有修改逻辑还没提交。看到它就想想这个修改是不是自己做的是不是应该提交没有特殊情况不要放着不管时间长了你自己都忘了改过什么。新增文件是另一个高发问题。你在工作副本里新建了一个Utils.java默认 TortoiseSVN 不会自动把它加进版本控制图标是灰色的。要想让这个文件被服务器管理必须在提交对话框里把它勾选上工具会在提交时自动执行 Add 操作。如果没勾选它就一直游离在版本控制之外。压缩包里的临时文件、IDE 配置文件我一般建议放到忽略列表而不是直接提交后面会细说。4.2 提交代码的正确姿势与日志规范提交操作在任意文件或目录上右键选择“SVN 提交”(SVN Commit)弹出提交对话框。对话框上半部分是本次要提交的文件列表默认会勾选所有新增和修改的文件。提交前一定要过一眼列表看看有没有多勾了编译产物、本地搭建的敏感配置等。我见过不止一次同事把本地数据库密码所在的配置文件直接提交上去导致全组拿到一份带密码的配置。如果你发现某个文件不该提交就把前面的勾去掉。对话框下半部分是日志信息(Message)。SVN 不像 Git 默认要求写提交说明但一个没有日志的提交对团队来说几乎是灾难。三个月后回头看历史你只能看到一个版本号完全不知道那次改了啥。我给团队定的规则是日志至少写清楚“改了什么 为什么”比如“修复订单列表在 Safari 下白屏问题”比“111”有价值得多。如果公司没有强制模板可以参考[模块] 操作的简述比如“[登录] 增加验证码”。点击确定后工具会执行提交窗口显示提交成功并返回本次的版本号。提交是不可逆的但也不是完全没法撤后面讲回退时再说。如果提交过程中报错说某个文件冲突那就需要先解决冲突再提交别硬来。4.3 更新代码和冲突解决的完整过程SVN 的更新操作和 Git 的 pull 概念类似是把服务器上别人提交的改动拉到你本地。在工作副本根目录右键 -“SVN 更新”(SVN Update)SVN 会对比服务器和本地的差异将新增和修改的文件更新下来。如果别人改的文件和你自己改的文件没有重叠工具会直接合并不会打扰你。但如果有两个人都改了同一个文件的同一处地方就会发生冲突。冲突之后文件图标变成黄色感叹号同时你会看到文件旁边生成了几个临时文件后缀分别是.mine、.theirs、.r版本号等。例如App.java.mine是你修改的版本App.java.theirs是服务器版本App.java.r123是基础版本。解决冲突的完整路径是在文件上右键 - TortoiseSVN -“编辑冲突”(Edit Conflicts)。工具会打开 TortoiseMerge 合并窗口左边显示的是你的版本(Mine)中间是服务器版本(Theirs)下方是合并结果。你要逐块检查改动决定保留哪一边或者手动编辑合并结果。保存后回到资源管理器在文件上右键 - TortoiseSVN -“标记为已解决”(Resolved)工具会删掉那三个临时文件黄色图标消失这时你再提交就一切正常。处理冲突有一条原则不要急着提交先跑一遍编译和相关测试再提交。很多冲突表面上是文本合并成功但逻辑上缺了两个人各自依赖的方法编译过了才算真的解决。4.4 还原误操作本地撤销如果本地改了一堆代码发现思路全错了想回到上一次更新后的状态用“还原”(Revert)。在文件或目录上右键 - TortoiseSVN -“还原”工具会把选中的文件恢复到更新时的版本所有本地修改全部丢弃。这个操作不可恢复所以我的习惯是在执行 Revert 前先确认自己不需要保留这些改了。拿不准的话可以先把改动文件复制一份到工作区外或者用“创建补丁”(Create Patch)把当前差异保存下来之后后悔了还能再应用回去。执行 Revert 时对话框会列出将被打回原形的文件看清列表再点确定。5. 分支合并与版本回退进阶操作中的关键细节5.1 创建分支/标签一句话理解分支的本质SVN 的分支不是像 Git 那样的指针逻辑它的本质就是服务器目录的复制。常见的仓库结构是三个并排目录trunk主干主要开发线branches各种分支比如branches/v2.0tags打标签的快照比如tags/release-2.0.1创建分支很容易在 trunk 目录上右键 - TortoiseSVN -“分支/标记”(Branch/Tag)。对话框里的 To URL 填目标分支地址比如https://svn.company.com/svn/Project/branches/v2.0建议在日志信息里写清楚基于哪个版本创建、分支用途。工具不会把服务器上真正的文件复制一遍它只是记录了一个廉价的复制操作所以哪怕仓库很大创建分支也基本是瞬间完成。创建分支后本地工作副本并没有自动切换过去。你需要在本地右键 - TortoiseSVN -“切换”(Switch)选择刚创建的分支 URL。理解这一点很重要分支创建是在服务器上你的本地工作副本还是指向 trunk。Switch 之后你的本地版本就切到了分支。5.2 合并的正确流程与范围选择Svn 合并比 Git 要繁琐一些主要体现在版本范围的选择上。常见需求有两种。第一种主干做了修复想同步到分支。这时在分支的工作副本上右键 - TortoiseSVN -“合并”(Merge)选择“合并版本范围”(Merge a range of revisions)From URL 填主干地址Revision range 填写要合并的主干版本号。比如主干 r1050 修复了一个 Bug你只需填 1050SVN 就把这次改动合并到分支工作副本。第二种功能分支开发完毕合并回主干。先在主干目录做一次 Update保证本地主干是最新的然后右键 - TortoiseSVN -“合并”选择“重新整合一个分支”(Reintegrate a branch)From URL 填分支地址工具会自动识别分支上的所有改动。合并后和更新一样可能产生冲突处理方式和前面说的完全一样。合并是一个会产生脏工作的操作所以我有一条铁律合并之前本地工作副本必须干净也就是所有修改都已经提交或者还原。否则你会分不清哪些改动是合并进来的、哪些是你自己的。5.3 从历史版本回退代码三个操作的区别线上出问题需要紧急回退这是 SVN 使用中最紧张的场景。很多人面对 Show Log 里的版本列表会犯迷糊因为菜单里既有“更新至此版本”(Update item to revision)又有“还原到此版本”(Revert to this revision)还有“从此版本还原更改”(Revert changes from this revision)。我一个个拆开说。先说“更新至此版本”。它会把本地工作副本的文件状态切到某个历史版本属于本地操作不影响服务器也不会产生新的提交。适合临时检查历史代码。再说“还原到此版本”。它会把工作副本回退到指定版本然后你可以提交。如果你选择的是 r100本地所有文件会变成 r100 的样子提交后服务器 HEAD 变成新的版本号内容是 r100 的内容。这相当于用一次新提交覆盖了 r101 到 r150 的所有改动。最后是“从此版本还原更改”。假设 r128 引入了一个坏改动你想只撤掉它但保留 r129 和 r130 的正确改动。选择 r128右键“从此版本还原更改”工具会把 r128 相对 r127 的差异反向应用回当前文件。这是一种更精细的“撤销某次提交”而不是把整个仓库状态回拨。我的个人经验是线上回退优先用“还原到此版本”因为生成的新提交内容容易理解测试也直观。用“从此版本还原更改”时如果中间多个版本改动互相交织可能产生很多冲突处理起来麻烦。5.4 补丁文件的使用场景补丁机制是我特别想提的一个功能它能让没有服务器权限的人也能参与代码 review。在修改过的文件或目录上右键 - TortoiseSVN -“创建补丁”(Create Patch)工具生成一个.patch或.diff文件里面记录了所有改动差异。你可以把这个补丁文件发给同事对方在对应版本的工作副本上右键 - TortoiseSVN -“应用补丁”(Apply Patch)选择补丁文件改动就会作用到他的工作副本上。这种方式很适合外协人员他们不直接给 SVN 账号只在提交前把补丁发给负责人检查。TortoisePatch 应用的界面能看到每个差异块可以局部选择比直接把整套文件发过去靠谱得多。补丁有一个前提条件接收方的工作副本必须和生成补丁时的基线版本基本一致如果对方已经改了很多补丁就容易冲突那就让对方先还原到一致状态再应用。6. 图标消失、认证失效等日常问题的排查思路6.1 图标不显示先从这两个原因查装了 TortoiseSVN 但资源管理器里看不到任何状态图标是最常见的求助问题。九成情况是下面两个原因之一。第一个原因是 Windows 资源管理器对图标叠加数量有限制。TortoiseSVN 默认会同时显示多种状态图标而 Windows 的限制大约是 15 个叠加图标装了很多 Shell 扩展软件(比如网盘、同步盘)后小乌龟的图标可能被挤掉。解决办法是在 TortoiseSVN Settings - Icon Overlays 里把不需要的 Status 关掉只保留 Modified、Conflicted、ReadOnly 等几个重要的。图标显示得越少占用的叠加槽位越少。第二个原因是图标缓存没刷新。尤其是打开一个旧项目文件夹、或者从 Git 切换到 SVN 工作副本时缓存可能还停留在“没有状态”的状态。Settings - Icon Overlays 里的 Status Cache 可以切换为 Default、Shell 和 None。如果你感觉图标显示不及时把它从 Default 改成 Shell或者干脆重启一次资源管理器试试。很多人通过这个设置解决了图标不更新的问题。6.2 认证信息失效的处理流程过程是服务器密码被管理员改了或者服务器证书过期你客户端里缓存的是旧密码每次操作都报认证失败。处理方法是在任意目录右键 - TortoiseSVN - Settings左侧“已保存数据”(Saved Data)里面有一个“认证数据(Authentication data)”点击“清除”按钮。同样建议把“SSL 服务器证书”(SSL server certificates)也一并清除。清完之后你下次访问仓库时会重新弹出账号密码框重新输入并保存即可。如果清完认证数据还报错就要检查仓库地址本身是否变了。很多公司切服务器后旧地址访问不了需要去拿最新的仓库 URL在 TortoiseSVN 的“重新定位”(Relocate)里更新地址。注意这个操作只改地址不影响本地文件。6.3 工作副本被锁定先 Clean up 再想别的另一种高频提示是“Working copy locked”(工作副本已锁定)。通常是因为上一次操作中途被中断比如更新到一半网络断了、提交时电脑蓝屏。工具会在.svn目录里留下一个锁标记。遇到这种情况第一步是在工作副本根目录右键 - TortoiseSVN -“清理”(Clean up)。这个操作会清除中断状态和临时文件不会删除你自己的修改可以放心执行。清理完再试之前失败的操作大多数情况就恢复了。如果清理完之后还是提示锁定可能是某些文件权限问题检查一下.svn目录是否被安全软件拦截。另外不要在 SVN 正在工作时直接杀进程那个锁标记大概率就是这么留下的。6.4 二进制文件冲突用文件锁避免互相覆盖SVN 对文本文件的合并处理得很成熟但对二进制文件(如图片、字体、Word 文档、安装包)无能为力。两个人同时改一张底图后提交的人会把先提交的人覆盖掉而且没有冲突提示丢失得无声无息。应对办法是 TortoiseSVN 的文件锁功能。在需要保护的文件上右键 - TortoiseSVN -“获取锁定”(Get Lock)锁上之后别人对这个文件的操作会受到限制默认情况下只能读取不能修改后提交。修改完后提交时勾选“Release lock”释放锁。6.5 不小心把 .svn 目录删了怎么恢复有的同事清理磁盘时会顺手把根目录的.svn文件夹删了导致右键菜单依然是 SVN 相关选项但一操作就报“不是工作副本”。此时不要盲目重新检出因为本地改过的代码可能还没提交。正确做法是把本地修改过的文件备份到工作区外然后重新 Checkout 到另一个临时目录把你备份的修改文件覆盖回去再走提交流程。如果你的改动不多这是成本最低的恢复方式。7. 给小乌龟定制的几个配置和一些用顺手的习惯7.1 全局忽略规则防止提交工具产物默认情况下TortoiseSVN 对工作副本里所有未版本化文件都会尝试提交。但像bin、obj、target、node_modules、.idea、*.class、*.log这类东西根本不该进仓库。你可以在任意目录右键 - TortoiseSVN - Settings -“忽略文件”(Ignore File)设置全局忽略规则把这些模式填进去。填完之后新改动文件里出现符合规则的文件状态就会显示为“已忽略”不会出现在提交列表里。7.2 提交对话框显示最近日志在 Settings - 对话框设置(Dialog Settings)里有一个“提交”(Commit)相关选项可以把最近提交日志作为模板展示。这样新同事在写提交说明时能参考团队已有的日志格式不让“111”这类垃圾日志出现在仓库里。7.3 合理选择 Status Cache 模式这是 TortoiseSVN 性能相关的一个重要设置。大型仓库文件数量动辄上万默认的 Default 缓存模式每次刷新目录都要扫描状态卡顿明显。Settings - Icon Overlays - Status Cache 切换为“None”或“Shell”可以明显降低 CPU 占用代价是图标显示有一点点延迟。对这个参数我的建议是仓库文件超过 8000 个就切到 Shell超过 2 万就直接用 None。7.4 用 Show Log 养成看历史的习惯日常开发中我用的最多的功能其实是“显示日志”(Show Log)。选中文件右键 - TortoiseSVN - 显示日志能看到这个文件的所有历史提交和改动。在日志窗格里你可以同时选中两个版本右键“比较”(Compare)直接看差异也可以右键一个历史版本选择“还原到此版本”。我排查线上问题时经常就是通过看 Show Log快速定位哪个版本引入了问题再决定回退到哪个点。7.5 我个人的操作习惯我在实际项目里形成了一套固定顺序写代码前先 Update 一次写完后 Commit 前再看一眼 Diff确认没有多提交和少提交遇到问题先在 Show Log 里查历史不急着改代码提交日志一定要带上模块名。这套流程看着简单但真的救过我很多次。特别是 Commit 前看 Diff 这个习惯能避免把调试日志、临时注释、无用改动提交上去。使用 TortoiseSVN 不需要把它当成多么高深的东西它的价值就在于让版本管理这件事在 Windows 上变得很直观。老项目也好老团队也好稳定不出错往往比换一套新工具更重要。如果在实际使用中你也遇到了上面某个坑照着操作一遍基本都能解决。
返回列表