2013年10月10日 星期四

VisualSVN自動備份

找了一些資料,終於測試出來OK了~^^....快記下來以免忘記。

1.hotcopy方式:(轉載自 http://www.the8m.com/blog/article/chengxua/visualsvnback.html )


simpleBackup.bat要放在svn版本庫的根目錄下。
SVN_backup.bat可隨意放。==============================================
SVN_backup.bat內容:

echo off
rem Subversion的安裝目錄 //如=>"C:\Program Files\VisualSVN Server"
set SVN_HOME="C:\Program Files\VisualSVN Server"
rem 所有版本庫的父目錄 //庫目錄,如=>d:\svn
set SVN_ROOT=C:\Repositories
set SVN_ROOT_RUN="C:\Repositories"
rem 備份的目錄(如:C:\svnbak)
set BACKUP_SVN_ROOT=C:\svnbak
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,4%_%date:~5,2%_%date:~8,2%
if exist %BACKUP_DIRECTORY% goto checkBack
echo 建立備份目錄%BACKUP_DIRECTORY%>>%BACKUP_SVN_ROOT%/backup.log
md %BACKUP_DIRECTORY%
rem 驗證目錄是否為版本庫,如果是則取出名稱備份
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I/conf/svnserve.conf" %SVN_ROOT_RUN%\simplebackup.bat "%%~fI" %%~nI
goto end
:checkBack
echo 備份目錄%BACKUP_DIRECTORY%已經存在,請清空。
goto end:end
=================================================
simpleBackup.bat 內容:

@echo 正在備份版本庫%1......
%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2
@echo 版本庫%1成功備份到了%2!==================================================


2.Dump方式:(轉載自 http://www.jtben.com/document/644303 )

使用方法:

1、将三个文件拷贝到版本仓库目录下

2、如果使用是Visual SVN的版本管理器。
   需要加入2个环境变量否则无法识别svnadmin命令
   SVN_HOME=C:\Program Files\VisualSVN Server   (注:Visual svn安装目录)
   Path追加 %SVN_HOME%\bin
3、分别根据需要运行相关批处理
4、还原时需要将7z压缩文件进行解压为*.bin文件
   同时版本仓库中不得有任何的子目录
DumpAll.bat內容:

@ECHO OFF
::====================
::Author     : Zealic
::Version    : 1.00
::FileName   : DumpAll.bat
::Summary    : Dump 當前目錄的所有SVN版本庫,腳本將備份當前目錄下的所有SVN版本庫,
::             本腳本依賴於 7za.exe 程序,請到下述連接下載程序
::             http://downloads.sourceforge.net/sevenzip/7za457.zip
::Update     : 2008-11-26
::====================
SET SVN_HOME="C:\Program Files\VisualSVN Server"
SET VAR_DATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
dir /B /AD > DIRS
IF EXIST DUMP_FILES (
  DEL /Q DUMP_FILES
)
FOR /F %%i IN (DIRS) DO (
  SET REPOS_NAME=%%i
  CALL :DUMP_REPOS
)
SET REPOS_NAME=

ECHO.
ECHO Compressing dump files...
7za a Repos_%VAR_DATE%.7z *.bin

ECHO Delete dump files...
FOR /F %%i IN (DUMP_FILES) DO (
  DEL /Q %%i
)

DEL /Q DIRS
DEL /Q DUMP_FILES

ECHO Successed.
GOTO :EOF

::==== Functions ====
:DUMP_REPOS
SET DUMP_FILE=%REPOS_NAME%.bin
ECHO Dumping repository ^"%REPOS_NAME%^" ...
%SVN_HOME%\bin\svnadmin dump ^"%REPOS_NAME%^" -q > %DUMP_FILE%
IF %errorlevel%==0 (
  ECHO %DUMP_FILE% >> DUMP_FILES
) ELSE (
  DEL /Q %DUMP_FILE%
  ECHO Dump ^"%REPOS_NAME%^" failed.
)
SET DUMP_FILE=
ECHO.
============================================ LoadAll.bat內容:(還沒試過)

@ECHO OFF
::====================
::Author     : Zealic
::Version    : 1.00
::FileName   : LoadAll.bat
::Summary    : Load Svn 版本庫,確保當前目錄為沒有任何子目錄,
::             腳本將搜索當前目錄下的 *.bin 文件,自動為其建立版本庫並 Load Dump文件。
::Update     : 2008-11-26
::====================
SET SVN_HOME="C:\Program Files\VisualSVN Server"
SET VAR_IS_EMPTY_DIR=TRUE
dir /B /AD > DIRS
FOR /F %%i IN (DIRS) DO (
  SET VAR_IS_EMPTY_DIR=FALSE
)
DEL /Q DUMP_FILES

IF "%VAR_IS_EMPTY_DIR%"=="FALSE" (
  ECHO Error : Current directory is not empty.
  GOTO :EOF
)
SET VAR_IS_EMPTY_DIR=

dir /B /A-D *.bin > DUMP_FILES
IF "%errorlevel%"=="0" (
  ECHO Finded dump file.
) ELSE (
  ECHO Error : Can not find dump file.
  GOTO :EOF
)

FOR /F %%i IN (DUMP_FILES) DO (
  SET REPOS_FILE=%%i
  CALL :LOAD_REPOS
)
SET REPOS_FILE=
DEL /Q DUMP_FILES
ECHO Successed.
GOTO :EOF

::==== Functions ====
:LOAD_REPOS
SET REPOS_NAME=%REPOS_FILE:~0,-4%
mkdir %REPOS_NAME%
ECHO Loading repository ^"%REPOS_NAME%^" ...
%SVN_HOME%\bin\svnadmin create %REPOS_NAME%
%SVN_HOME%\bin\svnadmin load -q %cd%\%REPOS_NAME% < %REPOS_FILE%
IF %errorlevel%==0 (
  ECHO %DUMP_FILE% >> DUMP_FILES
) ELSE (
  RMDIR /Q %REPOS_NAME%
  ECHO Load ^"%REPOS_NAME%^" failed.
)
SET REPOS_NAME=
ECHO.
====================================================

沒有留言: