Windows下SVN備份腳本


 

本站備份:svn備份與還原_腳本_(dump命令)

 

以下是轉載記錄, 轉自:https://wuxiaobai.win/archives/111

用法 

svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]

svnadmin dump命令用於導出整個Repository或Repository下的某個范圍的修訂版本。REPOS_PATH是版本庫的路徑,[-r LOWER[:UPPER]]用於指定導出的修訂版本范圍,由參數-r和兩個用:號隔開阿拉伯數字組成。例如:-r 0:50表示導出才版本0到版本50之間的所有修訂版,-r是revision的縮寫。

而另一個關鍵參數是--incremental。 它使用增量方式來導出版本,即每次都只導出自上一個版本以來的修改。這樣的好處是第一:可以把一個大的文 件切分成若干個小的文件。第二:在版本庫已經存在的情況下,我們只需要每次導出修改的部分,不需要每次都導出整個版本庫的內容

超級懶人bat腳本

@echo off
:: 關閉回顯
 
:: 說明:如有命令不明白,請使用幫助命令:命令/? 。如:for/?
 
:: 設置標題
title SVN備份腳本
 
rem 設置變量
 
:: SVN_HOME svn程序的安裝路徑,指定到bin目錄上一級。(如果路徑有空格,請用""。)
set SVN_HOME="C:\Program Files\VisualSVN Server"
:: SVN庫的路徑
set SVN_ROOT=E:\Repositories
:: 備份SVN父目錄的路徑
set SVN_BACKUP_ROOT=D:\SVNbackup
:: 獲取當前系統日期和時間用來創建目錄,格式:年月日_時分秒毫秒。如:20131129_16275274
set TIME_DIR=%date:~,4%%date:~5,2%%date:~8,2%_%time:~,2%%time:~3,2%%time:~6,2%%time:~9,2%
:: SVN備份子目錄的路徑
set BACKUP_DIRECTORY=%SVN_BACKUP_ROOT%\%TIME_DIR%
:: 日志文件路徑(將日志和備份文件放在一個目錄,刪除時一起刪除了)
set LOG=%BACKUP_DIRECTORY%\backup.log
:: 指定備份文件刪除時間(單位:天)。0 - 32768 范圍內的任何數字。
set NUM=365
 
rem 開始備份SVN
 
:: 判斷SVN程序是否存在
if not exist %SVN_HOME% goto error
 
goto start
 
:start
:: 查詢日志大小(單位:字節),超過1Mb就新建一個 (日志放入備份目錄后,此語句無效。僅備份!)
:: for /r %SVN_BACKUP_ROOT% %%I in (backup.log) do if %%~zI GEQ 1048576 ren %LOG% backup_%TIME%.log
:: 新建目錄
mkdir %BACKUP_DIRECTORY%
:: 建立日志
@echo [info]%date:~,10% %time:~,2%:%time:~3,2%:%time:~6,2%建立備份目錄:%BACKUP_DIRECTORY% >>%LOG%
:: 備份SVN版本庫並輸出日志到文件
for /d %%i in (%SVN_ROOT%\*) do (
@echo 備份 %%~ni 庫,備份文件名:%%~ni.dmp >>%LOG%
:: 完整備份(增量備份在dump后面添加參數 --incremental)
%SVN_HOME%\bin\svnadmin dump %SVN_ROOT%\%%~ni >%BACKUP_DIRECTORY%\%%~ni.dmp 2>>%LOG%
)
:: 輸出備份命令退出碼,用來判斷是否備份成功。成功的退出碼為0.
@echo [info]%date:~,10% %time:~,2%:%time:~3,2%:%time:~6,2%退出碼為:%errorlevel%>>%LOG%
:: 自動設置計划任務:每周六 晚上11點執行本腳本。
at 23:00 /next:S %~f0>>%LOG%
:: 刪除過期備份
goto delete
 
:delete
:: 輸出要刪除的目錄到日志文件
@echo [info]%date:~,10% %time:~,2%:%time:~3,2%:%time:~6,2%刪除%NUM%天前的備份:>>%LOG%
forfiles /P %SVN_BACKUP_ROOT% /M *_* /D -%NUM% /C "cmd /c echo 刪除文件夾:@file">>%LOG%
:: 使用rd命令刪除超過%NUM%天的備份目錄。如果不存在匹配條件的目錄,將提示:錯誤: 用指定的搜索標准沒有找到文件。如果存在匹配的文件,則提示:目錄名無效
forfiles /P %SVN_BACKUP_ROOT% /M *_* /D -%NUM% /C "cmd /c rd /s/q @path" 2>>%LOG%
goto end
 
:error
echo [error]%date:~,10% %time:~,2%:%time:~3,2%:%time:~6,2%程序目錄不存在,請檢查:%SVN_HOME%>>%LOG%
goto end
 
:end
:: 輸出一行空行分割日志
@echo. >>%LOG%
exit
:: 調試腳本用的命令
:: at 16:06 %~f0
:: PAUSE
:: exit

 ===================================================================================================

以下內容不需要查看

====================================================================================================
 舊文檔存根

       一共四個文件,兩個方法。一個用svnadmin dump命令,另一個用svnadmin hotcopy命令。文章里的目錄請根據自己的實際情況修改

先介紹svnadmin hotcopy命令腳本,一共兩個文件,兩個文件請放到版本庫父目錄下(一般為X:\Repositories)

simplebackup.bat

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

 

backup.bat

echo off 
rem Subversion 的安裝目錄 
set SVN_HOME=”C:\Program Files (x86)\VisualSVN Server” 
rem 所有版本庫的父目錄 
set SVN_ROOT=E:\Repositories 
rem 備份的目錄 
set BACKUP_SVN_ROOT=D:\SVNbackup 
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%DATE:~0,10%\ 
if exist %BACKUP_DIRECTORY% goto checkBack 
echo 建立備份目錄%BACKUP_DIRECTORY%>>%SVN_ROOT%\backup.log 
mkdir %BACKUP_DIRECTORY% 
rem 驗證目錄是否為版本庫,如果是則取出名稱備份 
for /r %SVN_ROOT% %%I in (.) do @if exist “%%I\conf\svnserve.conf” %SVN_ROOT%\simplebackup.bat “%%~fI” %%~nI 
goto end 
:checkBack 
echo 備份目錄%BACKUP_DIRECTORY%已經存在,清空ing。 
rd /s /q %BACKUP_DIRECTORY% 
goto startBack 
:end

 


因為上文中用了DATE:~0,10命令,所以請自行把電腦的時間格式調成yyyy-MM-dd,否則會造成無法創建文件夾導致備份失敗(Windows只能創建2016-02-01這種格式的文件夾)


svnadmin dump方法,兩個文件 
post-commit.bat放到版本庫父目錄 
deltaBackup.bat放到版本庫的hooks文件夾下(每個版本庫的hooks文 件夾下都需要放,支持增量備份,丟計划里面就行)

deltaBackup.bat

@echo 正在備份版本庫%2…… 
@%SVN_HOME%\bin\svnadmin dump %SVN_ROOT%\%1 –incremental>%DELTA_BACKUP_SVN_ROOT%\%1.dump 
@echo 版本庫%2成功備份到了%3!

 

post-commit.bat

@echo echo off 
set SVN_HOME=”C:\Program Files (x86)\VisualSVN Server” 
set SVN_ROOT=E:\Repositories 
set UNIX_SVN_ROOT=E:\Repositories 
set DELTA_BACKUP_SVN_ROOT=D:\SVNbackup\SVNIncrementalback 
set LOG_FILE=%DELTA_BACKUP_SVN_ROOT%\Incrementalbackup.log 
echo backup revision %2>>%LOG_FILE% 
for /r %SVN_ROOT% %%I in (.) do @if exist “%%I\conf\svnserve.conf” %SVN_ROOT%\%%~nI\hooks\deltaBackup.bat %%~nI %2 
goto end 
:end

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM