TortoiseGit与TortoiseSVN区别及覆盖图标不显示排查修复指南
用过 Tortoise 系列客户端的朋友对资源管理器里那种小乌龟图标应该都不陌生绿色对勾表示已同步红色感叹号表示有冲突蓝色加号表示新增。但你有没有遇到过这样的尴尬——同时装了 TortoiseGit 和 TortoiseSVN结果项目文件夹上光秃秃的什么状态图标都不显示或者只显示一个工具的图标另一个彻底“隐身”。这不是小概率事件我在帮同事处理环境时一个月能碰上三四回。这篇文章就把两件事一次讲透TortoiseGit 和 TortoiseSVN 到底差在哪以及覆盖图标overlay icons不显示的排查和修复思路。两件事表面不搭界实际上背后耦合在 Windows 同一套机制里理解了机制问题就解决了一大半。适合被版本控制图标困扰的新手也适合要管理多个项目、同时用 Git 和 SVN 的开发者。1. TortoiseGit 与 TortoiseSVN不是换个马甲的兄弟1.1 血统不同集中式与分布式的本质区别TortoiseSVN 和 TortoiseGit 都出自同一个“乌龟家族”图标风格、右键菜单逻辑、设置界面布局都高度相似很多刚接触的人容易把它们当成两个换皮版本——这是最大的误区。它们的核心服务对象根本不是同一种版本控制系统。TortoiseSVN 是 SVNSubversion的图形客户端而 SVN 是典型的集中式版本控制。集中式的意思是所有代码历史都保存在一台中心服务器上本地工作副本只是服务器某个版本的一份“快照”。你要提交必须联机提交后服务器会给项目分配一个全局递增的版本号比如 r1024。哪台电脑的副本想要最新代码就 Update更新一下从服务器拉取。TortoiseGit 则是 Git 的图形客户端。Git 是分布式版本控制每个人clone下来的仓库都包含完整历史你在本地commit不需要联网写完了再push到远端。没有“全局版本号”这种东西取而代之的是由内容生成的 40 位哈希值以及分支、标签等轻量指针。这套差异直接决定了两个工具的日常操作方式完全不同。举个例子SVN 项目里切换分支通常是在若干目录之间复制/粘贴一样的工作副本而 Git 项目里分支切换只是移动一个 HEAD 指针工作目录里的文件由 Git 自动“变脸”。习惯了 SVN 的人一开始用 TortoiseGit 经常会手忙脚乱——在 TortoiseSVN 里点“Update”是获取别人提交在 TortoiseGit 里你得先 Fetch 或 Pull概念完全不在一个频道上。1.2 日常操作的差异右键菜单背后的逻辑因为底层模型不同两个工具的右键菜单也各有侧重。TortoiseSVN 的菜单核心是 Checkout、Update、Commit、Revert、Merge它天然假设你随时和服务器打交道TortoiseGit 的菜单核心则变成了 Pull、Push、Commit、Branch、Merge、Switch/Checkout、Cherry Pick操作对象既有本地仓库又有远程仓库。我见过不少人从 SVN 转到 Git 后直接看教程说“右键 Commit”结果提交到了本地同事在服务器上根本看不到一脸懵。这就是没搞懂 TortoiseGit 和 TortoiseSVN 的Commit含义不同TortoiseSVN 的 Commit 等于“提交到服务器”TortoiseGit 的 Commit 只是“提交到本地仓库”想让大家看到还得再一步 Push。这个问题在工作中几乎每周都有同事踩坑建议项目组里从 SVN 迁到 Git 的人先把这个概念焊死在脑子里。还有一个容易被忽略的区别两个工具管理的工作副本元数据目录不同。SVN 从 1.7 版本开始只在工作副本根目录保留一个.svn文件夹Git 则是在仓库根目录放一个.git文件夹并且在任意子目录都能看到 TortoiseGit 菜单。如果你把项目目录随便拷贝到别的地方有时图标不显示了原因可能很简单——元数据目录根本没跟着过去工具识别不出这是一个版本控制目录。2. 图标叠加机制Windows 给小乌龟的“限量展位”2.1 覆盖图标是怎么画出来的所谓覆盖图标overlay icon是 Windows 资源管理器在文件或文件夹标准图标左下角叠加的一个小标记。它的实现方式叫 Shell 扩展通常是由软件注册一个 COM 组件Windows 在绘制资源管理器时去查询这些组件让它们决定“这个文件该显示什么标记”。TortoiseGit 和 TortoiseSVN 的状态图标比如绿色对勾、红色感叹号、蓝色加号都是靠这套机制显示出来的。它们会扫描你的工作副本对比文件当前状态和版本库中的状态然后返回对应的 overlay 结果给资源管理器。理解这个机制后你就会明白图标不显示不一定是你项目文件有问题也可能是 Shell 扩展没被加载或者加载了但没轮到它说话。你可以简单理解成Windows 资源管理器的文件图标是一张桌子覆盖图标是桌上的展位。TortoiseGit 想摆个摊TortoiseSVN 也想摆摊OneDrive、坚果云、百度网盘也想摆摊但桌子的面积是有限的。2.2 15 个名额的上限与抢占规则Windows 对资源管理器可加载的 icon overlay handler 数量是有硬限制的常见说法是 15 个。系统自己要先占用几个名额比如快捷方式的小箭头也会用到 overlay 机制部分系统功能也会注册 handler所以真正留给第三方软件的名额通常只有 10 个左右。哪些 handler 能占用名额不是按安装顺序而是按注册表键名的字符串排序。Windows 会去注册表这两个位置逐一读取子项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiersHKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers每个子项代表一个 overlay handlerWindows 按子项名称的字符排序从前往后加载加载满 15 个就不再管后面的了。所以你去看注册表时会发现 Tortoise 系工具的子键通常长这样1TortoiseNormal、2TortoiseModified、3TortoiseConflict。名字前面带“空格数字”是有意为之——空格在字符排序中非常靠前这样能保证自己的 handler 排在比较前的位置避免被系统或第三方工具挤出名额。可是一旦你装了 OneDrive又装了 Dropbox再装个网盘客户端和杀毒软件的 Shell 扩展它们的键名可能五花八门有的名字前面也有空格。于是 TortoiseGit 排到了第 11 位TortoiseSVN 排到第 12 位Windows 加载到第 15 个就停止排在后面的自然就显示不出来。说白了这不是软件坏了是“名额”被抢光了。3. 图标不显示先按顺序做这几步3.1 最基础确认缓存进程在不在遇到图标不显示我建议先不要急着卸载重装按顺序排查。第一步是确认 Tortoise 自己的状态缓存进程有没有在跑。TortoiseGit 和 TortoiseSVN 会各有一个后台进程负责扫描工作副本并维护文件状态缓存分别是TGitCache.exe和TSVNCache.exe。这个进程如果没运行或者刚开机还没来得及扫描图标就会不显示或一直停留在旧状态。打开任务管理器搜一下进程名看到有它在跑就基本正常。如果它不在可以先注销再登录或者右键项目目录触发一次菜单调用看进程是否被拉起。另外一个相关设置是“状态缓存”模式。打开 TortoiseGit 的 Settings进入 Icon Overlays 一栏里面有一个 Status Cache 选项。常见的模式有 Default、Shell、None 几种。如果图标一直反映不了最新状态我通常会把这个选项切换到 Shell应用后再切回 Default然后重启资源管理器。这种做法可以强制缓存重建很多时候比反复重启电脑管用得多。3.2 没有反应排查注册表挂载如果缓存进程正常但图标就是不出来下一步去注册表看看 ShellIconOverlayIdentifiers 有没有 Tortoise 相关子项。按下 WinR输入regedit依次定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers在里面找有没有形如1TortoiseNormal、2TortoiseModified之类的项。TortoiseGit 的子键名通常带 Git 字样TortoiseSVN 的直接叫 Tortoise 开头。如果完全找不到大概率是安装出了问题或者杀毒软件清理注册表时误删了 Shell 扩展需要重装或修复。同时注意你的 Windows 是 64 位还是 32 位。TortoiseGit 和 TortoiseSVN 的安装包分 x64 和 x86 版本系统是 64 位的就装 64 位版本。资源管理器是 64 位进程加载 32 位 Shell 扩展会不成功这种现象常发生在有人为了“兼容旧插件”故意装 32 位版的时候。3.3 多 Tortoise 或网盘类工具抢位置如果注册表里能看到 Tortoise 相关子项但图标依然不显示大概率是叠加名额被其他工具占满了。你可以数一数 ShellIconOverlayIdentifiers 下有多少个子项。如果总数已经接近甚至超过 15而且排在 Tortoise 前面的第三方键很多Tortoise 的图标自然显示不出来。这种情况最典型的使用场景就是电脑上同时装了 TortoiseGit、TortoiseSVN、OneDrive、坚果云外加某安全卫士的图标扩展。大家都要在文件图标上“站位置”最后就把 Tortoise 挤出名额。还有更隐蔽的情况某些软件卸载后没有清理注册表留下大量失效的 overlay handler 空子项白白占着名额。这时需要手动清理但要注意修改注册表前一定先导出备份别删错系统项。4. 实战修复让图标稳定回来的完整步骤4.1 精简图标类型把名额让给需要的如果你同时用 Git 和 SVN两个 Tortoise 都装了我建议先在每个工具里做“瘦身”。打开 TortoiseGit 的 Settings进入 Icon Overlays 选项卡你会看到一列可以勾选的图标类型比如 Modified、Added、Conflict、Deleted、Ignored、ReadOnly、Locked、Unversioned 等。对大多数人来说真正关心的只有 Modified 和 Conflict其他类型完全可以关掉。关掉之后有两个好处一是注册的 overlay handler 数量减少占用的名额变少二是资源管理器绘制文件图标时要做的事变少了大目录下尤其明显。TortoiseSVN 也是这样操作把用不到的图标类型全关只保留必要的几种。这个动作完全不需要动注册表但效果立竿见影。4.2 清理 Windows 图标缓存有时候 overlay 扩展本身正常但 Windows 的图标缓存已经“固化”了必须清掉后重建。清缓存前先保存好其他工作因为要临时关闭资源管理器。管理员运行命令提示符依次执行taskkill /f /im explorer.exe del /a %LocalAppData%\IconCache.db del /a %LocalAppData%\Microsoft\Windows\Explorer\iconcache_*.db start explorer.exe第一行关闭资源管理器后两行删除图标缓存文件最后一行重新打开资源管理器。执行完图标体系会重建Tortoise 覆盖图标通常会跟着恢复。如果不想用命令行也可以在任务管理器里找到“Windows 资源管理器”右键重启然后再手动删除%LocalAppData%\IconCache.db和%LocalAppData%\Microsoft\Windows\Explorer\iconcache_*.db。Win10/Win11 下也可以试一试用ie4uinit.exe -show强制刷新图标缓存有时比整套删缓存温和得多适合那种只是部分图标没刷新的情况。4.3 永久性规避调整 Overlay 优先级如果精简后名额还是不够最后的手段是手动调整注册表排序把 Tortoise 的 handler 挤到最前面。因为 Windows 按字符排序加载你可以把 Tortoise 相关子键的名称前面多加几个空格。比如原来是1TortoiseNormal改成1TortoiseNormal两个空格。空格越多排序越靠前。操作步骤在注册表里找到ShellIconOverlayIdentifiers先对HKEY_LOCAL_MACHINE分支右键导出备份。然后逐个重命名 TortoiseGit 和 TortoiseSVN 的子键在名字前增加空格让它们排在网盘、杀毒软件、其他工具之前。改完后注销再登录通常优先级的调整就生效了。需要注意的是注册表只是告诉 Windows“先加载谁”如果子项总数超过 15 个排在最后的 handler 照样不显示。所以“排序”和“精简”必须配合只排序不精简效果有限。5. 高频问题速查与避坑手册5.1 常见问题对照表现象原因处理方式所有项目都不显示状态图标缓存进程被杀或资源管理器未刷新检查 TGitCache.exe / TSVNCache.exe重启资源管理器只有部分文件不显示图标overlay 名额被其他工具挤占精简 Tortoise 图标类型调整注册表优先级图标一直停留在旧状态缓存状态未及时更新切换 Status Cache 模式或重启缓存进程升级 Windows 后图标消失旧版本 Shell 扩展不兼容新系统安装最新版 TortoiseGit / TortoiseSVN64 位系统上图标不显示装了 32 位客户端重装对应 x64 版本同时装 Git 和 SVN只有一个显示注册表加载顺序被抢保留最常用的那个或者精简后调整排序项目复制到别处后图标消失缺少 .git / .svn 元数据回原目录确认版本控制信息是否存在5.2 三条经验性避坑心得第一不要迷信“优化工具”里的垃圾清理功能。很多优化软件会把 Shell 扩展的注册表项当作无效项或危险项清理掉清理完以后 Tortoise 的覆盖图标就永久“失踪”了重装都不一定找得回来。我的做法是装好 Tortoise 之后就把这类优化工具的“开机加速”和“注册表清理”功能关掉。第二同时安装多个同类型工具的代价比想象中高。如果你只是偶尔用一下 SVN 项目没必要和 TortoiseGit 一起装两个资源管理器名额有限装得越多冲突概率越大。条件允许的话SVN 项目可以换用另一个不带 overlay 的轻量客户端Git 项目保留 TortoiseGit。第三改注册表前一定要备份。我有一次帮同事手动调优先级忘记导出结果系统在排序键名时把某个中文输入法的 handler 挤到前面资源管理器卡了半分钟。虽然最终用还原解决了但那几分钟的教训足够深刻——注册表操作但凡带着regedit三个字备份永远优先。6. 图标修好后顺手用到的两个高频操作6.1 切换分支的正确姿势很多人把 TortoiseGit 的分支切换和 TortoiseSVN 的“切换副本目录”混为一谈。其实 TortoiseGit 里的操作入口是右键工作副本 - TortoiseGit - Switch/Checkout或者新版里的 Branch 菜单。在对话框里选择你要切过去的本地分支或远程跟踪分支。需要注意如果当前工作区有未提交的改动TortoiseGit 会弹出提示。当改动文件和目标分支对应文件没有冲突时改动会保留在工作区一旦冲突工具会拒绝切换。所以我通常都会提前把改动 commit 或者 stash 起来再执行切换。切换成功后文件夹里的图标状态会重新扫描——这时候你会切身感受到上一章里那些缓存设置有多重要。6.2 cherry-pick把别的分支的某一个提交搬过来修好图标之后另一个高频操作是 cherry-pick。典型的场景是某个功能在 dev 分支做了三次提交但其中只有一个修复 bug 的提交需要合入 master于是打开 TortoiseGit 的日志窗口切到 dev 分支选中那个提交可以配合 Ctrl 多选几个提交右键选择 Cherry Pick。执行后这些提交会被应用到当前分支的工作区并生成新的提交。如果代码有冲突TortoiseGit 会进入冲突解决流程解决后记得手动完成提交。我的个人习惯是cherry-pick 前先把当前分支状态清干净避免把无关改动混进这次应用里。提交信息我也会写得足够完整这样在日志窗口里一眼就能认出不用担心搬错提交。这个操作在 TortoiseSVN 里没有完全对等的概念它更像是合并某个修订版本到当前工作副本——这也是两个工具“看起来像、用起来差很远”的又一个例子。

相关新闻

从一维到二维:坐标、边界、存储与算法的避坑指南

从一维到二维:坐标、边界、存储与算法的避坑指南

提到“升到二维涉及到的各种问题”,我脑子里第一时间跳出来的不是数学课本里的平面和直角坐标系,而是这几年写网格地图、图像算法、表格数据处理时踩过的一堆坑。从一维到二维,表面上看只是多了一个维度、多一个下标的事,但坐标怎…

2026/10/9 10:44:18 阅读更多 →
Spring Boot社区医院管理系统源码:从环境对齐到演示答辩全流程指南

Spring Boot社区医院管理系统源码:从环境对齐到演示答辩全流程指南

拿到这种“Spring Boot社区医院管理系统源码”标题的项目,第一反应别急着解压。我在网上见过太多写着“可直接运行”的毕业设计项目,实际上要么是MySQL版本不匹配,要么是前端node_modules没带上,再要么是Spring Boot版本太新导致一…

2026/10/9 10:44:18 阅读更多 →
眼科四分类数据集实战:70MB小体量跑通全流程

眼科四分类数据集实战:70MB小体量跑通全流程

简介:这份眼睛疾病分类数据集面向医学图像处理初学者、计算机视觉课程实验者及需要快速验证分类模型的研究人员,解决眼疾图像数据获取难、预处理繁琐的问题。数据按文件夹组织,可直接用ImageFolder加载,无需额外清洗。压缩包共604…

2026/10/9 10:43:17 阅读更多 →

最新新闻

Agent-Reach 实战:CLI 驱动 AI Agent 的架构、安装与自动化

Agent-Reach 实战:CLI 驱动 AI Agent 的架构、安装与自动化

1. 从零认识 Agent-Reach:一个 CLI 驱动的 AI Agent 工具到底解决什么问题第一次看到 Agent-Reach 这个名字,我下意识把它归类成又一个"套壳聊天框"。真正跑起来之后才发现,它的定位其实更偏底层——一个用命令行驱动的 AI Agent 执…

2026/10/9 11:20:12 阅读更多 →
claude-mem实测:让Claude Code告别金鱼记忆,自动沉淀项目经验

claude-mem实测:让Claude Code告别金鱼记忆,自动沉淀项目经验

上周一我打开 Claude Code,准备接着做支付模块的重构。前一天我明明已经和它把方案聊得很透了:项目统一用 pnpm、测试框架是 vitest、支付回调在src/modules/payment/callback.ts、重构时不要动 stripe SDK 的版本。结果新的会话一上来,它先客…

2026/10/9 11:20:12 阅读更多 →
用Windsurf开发NFT共创Web3项目:TaoToken统一Key让AI IDE真正跑起来

用Windsurf开发NFT共创Web3项目:TaoToken统一Key让AI IDE真正跑起来

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 11:20:12 阅读更多 →
AI 测试之如何使用 MCP 做自动化测试:从 Chrome DevTools 到 TaoToken 统一 Key 通道

AI 测试之如何使用 MCP 做自动化测试:从 Chrome DevTools 到 TaoToken 统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 11:20:12 阅读更多 →
如何在1分钟内编写Cursorrules:用TaoToken统一Key快速验证规则生效

如何在1分钟内编写Cursorrules:用TaoToken统一Key快速验证规则生效

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 11:20:12 阅读更多 →
物业管理系统源码实战:Access数据库设计与C#连接部署指南

物业管理系统源码实战:Access数据库设计与C#连接部署指南

简介:面向小区物业管理人员与.NET开发者的物业管理系统源码,基于VS2010与Access数据库的C/S架构,覆盖收费管理、住户管理、房间及单价设置、通知单打印,并支持收支与住户信息的Excel批量导入导出。通知单打印采用水晶报表实现&…

2026/10/9 11:19:11 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →