一、採用svn內建備份功能進行完全備份,需要下面兩個檔案,放在倉庫的父目錄裡面。
1)simplebackup.bat
@echo 正在備份版本庫%1......
@%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2
@echo 版本庫%1成功備份到了%2!
(注意:此檔案內容就這三行,無需做任何修改)
2)backup.bat
echo off
rem Subversion的安裝目錄
set SVN_HOME="F:\Program Files\Subversion"
rem 所有版本庫的父目錄
set SVN_ROOT=E:\svnrepository
rem 備份的目錄
set BACKUP_SVN_ROOT=F:\share\all (如果是區域網路中的另一台機子,那麼等號後面可以寫\\192.168.0.*\share\all,不過要特別注意的是,share檔案夾必須設成共用,既要能讀還要能寫,這樣才能把倉庫寫進去)
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%已經存在,請清空。
goto end
:end
(注意:backup.bat檔案只需根據實際情況修改紅色字型的三個路徑,如果路徑中包含的檔案夾名稱存在空格,整個路徑需要用雙引號括起來,例如上例中Subversion的安裝目錄)
完全備份的結果是在目標路徑中(上例就是在all的檔案夾下)產生一個以日期為名稱的檔案夾,裡面就是各個倉庫了。
二、增量備份
本人目前不知道如何寫增量備份的指令碼,所以只能老老實實用命令了。
點擊開始——運行——cmd
進入到svn服務端安裝路徑下的bin檔案
cd f:\Program Files\Subversion\bin
svnadmin dump E:\svnrepository\local --revision 9:13 --incremental > E:\zengliang\add(注意,revision和incremental和兩個橫杆之間不要有空格,這是後來驗證的,下面圖片有誤)
上述命令是說把local倉庫的第9到13版本增量備份到e盤的zengliang檔案夾中,運行後產生了一個名為add的檔案,運行命令看
如果要把增量備份恢複回來,則使用svnadmin load命令,例如
svnadmin load E:\svnrepository\local < E:\zengliang\add
運行命令後的圖示大概如下:
目前我們公司的svn庫備份採用每周完全備份,每天增量備份的策略,這樣如果一旦發生故障,可以拿最後一次的完全備份檔案,然後把之後的增量備份按版本先後恢複回去,就可以了;完全備份可以設定系統的任務計劃,定時執行。