svn深度清理需分层处理:先用svn cleanup清除工作副本锁和临时文件;再批量删除嵌套.svn目录释放空间;接着压缩fsfs仓库并清理日志;最后通过dump/filter/reload剔除历史冗余数据。

SVN本地磁盘空间没明显释放,往往不是删了文件就完事——真正占地方的,是历史修订记录、未清理的.svn元数据、残留日志和锁文件。深度清理需要分层处理:先清工作副本里的“现场垃圾”,再动版本库级冗余,最后管好日志生命周期。
一、清理工作副本中的锁定与临时文件
这是最常见也最容易忽略的一层。当SVN操作中断(比如更新失败、提交卡住),.svn目录里会留下lock文件和未执行完的log指令,导致后续所有操作报“working copy locked”错误。
- 在项目根目录右键 → TortoiseSVN → “Clean up”,勾选“Include externals”和“Break locks”更彻底
- 命令行方式(需进入工作副本):svn cleanup --include-externals --break-locks
- 若仍报错,可手动删除所有.svn/wc.db-journal、.svn/lock、.svn/log等文件(不删wc.db本身)
二、批量清除嵌套的.svn隐藏文件夹
当你只是想把项目转为普通文件夹(比如导出交付、迁移Git),保留代码但甩掉SVN痕迹,就得干掉所有.svn目录。它们分散在每一级子目录,且默认隐藏。
- 图形化操作:资源管理器中搜索“svn”,勾选“搜索隐藏的文件和文件夹”+“搜索系统文件夹”+“搜索子文件夹”,全选删除
-
PowerShell一键清空(以D:\myproject为例):
Get-ChildItem D:\myproject -Directory -Recurse | Where-Object {$_.Name -eq '.svn'} | ForEach-Object {Remove-Item $_.FullName -Force -Recurse} - 批处理(.bat)通用脚本:保存为clean-svn.bat,双击运行即可递归删除当前目录下所有.svn文件夹
三、清理SVN服务端日志与仓库碎片
如果你是管理员,或本地跑着VisualSVN Server,日志和FSFS仓库本身的存储效率也会悄悄吃掉空间。
-
压缩仓库结构(仅FSFS格式支持):
svnadmin pack "C:\Repositories\myrepo" —— 把零散rev文件合并,减少I/O碎片 - 清理服务器日志:VisualSVN默认日志在 %VISUALSVN_SERVER%\Logs\,可直接删掉30天前的.zip或.log文件;也可在Web管理界面开启“日志轮转”,设最大保留100MB
- 启用自动垃圾回收:VisualSVN Server 5.0+ 支持GC策略,在“高级设置”中打开“Enable automatic garbage collection”,避免废弃对象长期占位
四、导出精简版仓库(终极瘦身)
如果仓库里曾误提交过大型二进制文件(如ISO、视频)、测试分支或临时目录,单纯删文件没用——历史还在。必须重生成仓库。
- 导出全量dump:svnadmin dump "C:\Repositories\oldrepo" > full.dump
- 过滤掉不需要的路径(例如删掉/trunk/assets/large_bin/):
svndumpfilter exclude trunk/assets/large_bin --renumber-revs --drop-empty-revs clean.dump - 新建空库并加载:
svnadmin create "C:\Repositories\newrepo"
svnadmin load "C:\Repositories\newrepo" - 停服务 → 替换原库目录 → 重启服务











