以下是一个简单实用的Windows环境下SVN仓库备份脚本,使用批处理(.bat)实现,适合懒人使用。
@echo off
:: SVN备份脚本
:: 作者:IT工程师
:: 日期:%date%
:: 版本:1.2
:: 设置变量
set SVN_ADMIN="C:\Program Files\TortoiseSVN\bin\svnadmin.exe"
set BACKUP_DIR=D:\SVN_Backups
set REPOS_DIR=E:\SVN_Repositories
set LOG_FILE=%BACKUP_DIR%\backup_log.txt
set DAYS_TO_KEEP=30
:: 创建备份目录
if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"
:: 记录开始时间
echo ========= 备份开始 [%date% %time%] ========= >> "%LOG_FILE%"
:: 获取所有仓库列表
for /d %%i in ("%REPOS_DIR%\*") do (
set REPO_NAME=%%~ni
set BACKUP_FILE=%BACKUP_DIR%\%REPO_NAME%_%date:/=-%_%time::=-%.dump
echo 正在备份仓库: %REPO_NAME% >> "%LOG_FILE%"
:: 执行备份
%SVN_ADMIN% dump "%%i" > "%BACKUP_FILE%"
if %errorlevel% equ 0 (
echo 备份成功: %BACKUP_FILE% >> "%LOG_FILE%"
:: 压缩备份文件
echo 正在压缩备份文件... >> "%LOG_FILE%"
"%ProgramFiles%\7-Zip\7z.exe" a -tzip "%BACKUP_FILE%.zip" "%BACKUP_FILE%"
if %errorlevel% equ 0 (
echo 压缩成功: %BACKUP_FILE%.zip >> "%LOG_FILE%"
del "%BACKUP_FILE%"
) else (
echo 压缩失败: %BACKUP_FILE% >> "%LOG_FILE%"
)
) else (
echo 备份失败: %REPO_NAME% >> "%LOG_FILE%"
)
)
:: 清理旧备份
echo 正在清理超过%DAYS_TO_KEEP%天的旧备份... >> "%LOG_FILE%"
forfiles /p "%BACKUP_DIR%" /m *.zip /d -%DAYS_TO_KEEP% /c "cmd /c echo 删除旧备份: @path >> "%LOG_FILE%" & del @path"
:: 记录结束时间
echo ========= 备份结束 [%date% %time%] ========= >> "%LOG_FILE%"
echo. >> "%LOG_FILE%"
echo SVN备份完成!结果已记录到 %LOG_FILE%
pause
配置变量:
SVN_ADMIN
:svnadmin.exe的路径(根据你的TortoiseSVN安装位置调整)BACKUP_DIR
:备份文件存放目录REPOS_DIR
:SVN仓库所在目录DAYS_TO_KEEP
:保留备份的天数依赖工具:
执行方式:
svn_backup.bat
备份内容:
:: 获取上次备份版本号
set LAST_REV=0
if exist "%BACKUP_DIR%\%REPO_NAME%_last_rev.txt" (
for /f "usebackq" %%j in ("%BACKUP_DIR%\%REPO_NAME%_last_rev.txt") do set LAST_REV=%%j
)
:: 执行增量备份
%SVN_ADMIN% dump "%%i" --incremental -r %LAST_REV%:HEAD > "%BACKUP_FILE%"
:: 记录最新版本号
svnlook youngest "%%i" > "%BACKUP_DIR%\%REPO_NAME%_last_rev.txt"
:: 添加网络位置映射(根据需要取消注释)
:: net use Z: \\backup_server\svn_backups password /user:username
:: set BACKUP_DIR=Z:\SVN_Backups
:: 使用blat发送邮件(需要先安装blat)
if exist "%LOG_FILE%" (
blat "%LOG_FILE%" -to admin@example.com -subject "SVN备份报告" -server smtp.example.com -f svn_backup@example.com
)
这个脚本提供了完整的SVN仓库备份解决方案,包括压缩和自动清理功能,适合大多数Windows环境下的SVN备份需求。