您的位置:首页 > 其它

SVN自动全备份及增量备份脚本,包含文件压缩,可加入window 任务

2013-07-23 16:59 411 查看


SVN自动全备份及增量备份脚本,包含文件压缩,可加入window 任务

一直用这套脚本备份,脚本主体虽不是原创,但是从网上得到后因为不能运行也进行了些修改,前两天看到有人问关于SVN备份的问题,今天又把脚本整理了一下,解决了不能循环备份多个配置库的问题。希望对大家有所帮助。在此也谢谢提供脚本主体的高人。

我的备份策略是一个月一次全备份,一周一次增量备份,并且每天也进行增量备份,在Window任务里设置定时进行,设置好后就不用管了,再加一层保险就是定期把备份文件移到另外一台机器存储。

(一)全备份,包含两个文件hotcopy.bat和最终执行文件fullbackup.bat

1) hotcopy.bat

@echo 正在备份版本库%1……

rem @%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2

@%SVN_HOME%\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2

@echo 版本库%1成功备份到了%2!

2)fullbackup.bat

echo off

rem Subversion的安装目录

rem set SVN_HOME="F:\Program Files\Subversion"

set SVN_HOME="F:\Program Files\CollabNet Subversion Server"

rem 所有版本库的父目录

set SVN_ROOT=G:\SVN

rem 备份的目录

set BACKUP_SVN_ROOT=h:\svnrootbak

set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10%

if exist %BACKUP_DIRECTORY% goto checkBack

echo 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/fullbackup.log

mkdir %BACKUP_DIRECTORY%

rem 验证目录是否为版本库,如果是则取出名称备份

for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" hotcopy.bat "%%~fI" %%~nI

goto end

:checkBack

echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。

goto end

:end

(二)增量备份,包含三个文件,dump.bat、最终执行文件svndump.bat和配置库名称配置projectlist.conf

1)dump.bat

@ECHO OFF

rem 调用格式:dump 项目库名

if "%1"=="" goto no_args

set PROJECT=%1

if not exist %RAR_STORE%\%PROJECT% mkdir %RAR_STORE%\%PROJECT%

cd %RAR_STORE%\%PROJECT%

SET LOWER=0

SET UPPER=0

@echo 项目库%PROJECT%2...>> %Log_PATH%\%PROJECT%_log.txt

%SVN_LOOK% youngest %SVN_REPOROOT%\%PROJECT%> %Log_PATH%\A.TMP

@echo 项目库%PROJECT%3...>> %Log_PATH%\%PROJECT%_log.txt

@FOR /f %%D IN (%Log_PATH%\A.TMP) DO set UPPER=%%D

if %UPPER%==0 GOTO :N_EXIT

if not exist %Log_PATH%\%PROJECT%_last_revision.txt GOTO :BAKUP

rem 取出上次备份后的版本号,并做+1处理(注意此算法未在98系统验证)

@FOR /f %%C IN (%Log_PATH%\%PROJECT%_last_revision.txt) DO @set LOWER=%%C

@set /A LOWER=%LOWER%+1

rem 不需要备份,则跳转结束

IF %LOWER% gtr %UPPER% GOTO :N_EXIT

:BAKUP

SET FILENAME=%PROJECT%_%LOWER%_%UPPER%

@ECHO 开始备份项目库:%PROJECT%,生成文件=%FILENAME%

%SVN_ADMIN% dump %SVN_REPOROOT%\%PROJECT% -r %LOWER%:head --incremental >%FILENAME%.dmp

rem %RAR_CMD% a -df %PROJECT%_%UPPER%.rar %

rem 准备写备份日志信息

IF %LOWER% gtr 0 GOTO :WRITENOTE

@ECHO ------2-----%date% >> %Log_PATH%\%PROJECT%_log.txt

@echo -- 3-------添加备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%_log.txt

GOTO :COMPLETE

:WRITENOTE

@ECHO %date% >> %Log_PATH%\%PROJECT%_log.txt

@echo -- 4------添加增量备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%_log.txt

:COMPLETE

rem 下面一行用于拷贝备份文件到映射的驱动器上

rem copy %PROJECT%.rar %RAR_STORE%\%PROJECT%\

move %FILENAME%.dmp %RAR_STORE%\%PROJECT%\

del %Log_PATH%\A.TMP

@echo %UPPER% > %Log_PATH%\%PROJECT%_last_revision.txt

:N_EXIT

@echo 项目库%PROJECT%处理结束...>> %Log_PATH%\%PROJECT%_log.txt

@CD..

@exit /B

:no_args

@ECHO ON

@echo "正确调用方法: dump 项目库名"

2)svndump.bat

echo off

rem Subversion的安装目录及执行文件

set SVN_HOME="F:\Program Files\CollabNet Subversion Server"

set SVN_ADMIN=%SVN_HOME%\svnadmin.exe

set SVN_LOOK=%SVN_HOME%\svnlook.exe

rem 配置库仓库根目录

set SVN_REPOROOT=G:\SVN

rem 压缩命令

set RAR_CMD="E:\Progra~1\WinRAR\WinRAR"

rem 增量备份文件存放路径

set RAR_STORE="H:\svnincrementW"

rem 日志及最后一次备份修订号存放文件目录,以下是跟增量备份脚本目录同一目录

set Log_PATH=G:\backup\incrementW

@echo 项目库%PROJECT%处理1...>> %Log_PATH%\%PROJECT%_log.txt

rem 读取项目库列表文件,并忽略其中;开头的行

FOR /f "eol=;" %%C IN (projectlist.conf) DO call G:\backup\incrementW\dump.bat %%C

3)projectlist.conf

;**************************************************

;01. project1开发库

; 更新频率: 高

;**************************************************

PROJECT1

;**************************************************

;02. 此处可写注释信息

;**************************************************

PROJECT2

PROJECT3

PROJECT4

PROJECT5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: