svn增量备份核心是svnadmin hotcopy热复制,仅复制新增/变更版本文件,无需停服务;脚本自动按时间戳备份并保留最近7次,定时任务每日执行,需验证备份可用性。

SVN服务端做增量备份,核心是利用 svnadmin hotcopy 的“热复制”能力——它能识别仓库中新增或变更的版本文件(如 db/revs/0、db/revs/1 等),只复制自上次备份以来产生的新数据,无需停服务,也不依赖外部时间戳比对。
确认 SVN 环境与权限
确保以下条件已满足:
- SVN 服务正在运行(
svnserve或 Apache 模式均可,hotcopy不要求停止服务) - 执行备份的账户对源仓库目录有读取权限,对目标备份目录有写入权限
- Windows 环境下,
svnadmin.exe已加入系统 PATH,或脚本中使用绝对路径调用(如"C:\Program Files\VisualSVN Server\bin\svnadmin.exe")
编写增量备份批处理脚本(Windows)
该脚本以“保留最近 N 次备份”为逻辑,每次执行时自动清理最旧的一次,再生成带时间戳的新备份:
- 在脚本开头定义关键路径:
set SVN_REPO=D:\Repositories\myprojectset BACKUP_ROOT=E:\SVN_Backup\myprojectset KEEP_COUNT=7(保留最近 7 天备份) - 生成当前时间戳目录名:
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"set "YY=%dt:~2,2%" && set "MM=%dt:~4,2%" && set "DD=%dt:~6,2%"set "BACKUP_DIR=%BACKUP_ROOT%\%YY%%MM%%DD%" - 执行热复制并清理日志:
"%SVN_ADMIN%" hotcopy "%SVN_REPO%" "%BACKUP_DIR%" --clean-logs - 删除超出保留数量的旧备份:
for /f "skip=%KEEP_COUNT% eol=: delims=" %%i in ('dir "%BACKUP_ROOT%" /b /ad /o-d 2^>nul') do @rd /s /q "%BACKUP_ROOT%\%%i"
配置 Windows 定时任务
让脚本每天凌晨 2:00 自动运行:
- 打开“任务计划程序”,新建基本任务
- 触发器设为“每天”,起始时间填
02:00:00 - 操作选“启动程序”,程序/脚本填备份批处理文件完整路径(如
D:\Scripts\svn_backup.bat) - 在“常规”选项卡勾选“不管用户是否登录都要运行”和“不保存密码时只在用户登录时运行” → 实际建议勾选“只在用户登录时运行”,避免因凭据问题导致失败;若需无人值守,请配置专用低权限服务账户并赋予对应目录权限
验证备份有效性
定期检查不能只看文件存在,要确认可恢复:
- 手动进入任一备份目录(如
E:\SVN_Backup\myproject\260619),运行:svnadmin verify .(注意末尾的点)→ 成功输出Verified revision XXX.即表示结构完整 - 挑一个旧备份,尝试用
svnadmin load导入到测试库,检出最新版本代码,确认内容一致 - 检查
db/revs/和db/revprops/下文件数量是否逐日递增,可初步判断增量逻辑生效











