懶人指令碼 Windows下SVN備份指令碼

2021-08-25 11:04:32 字數 4420 閱讀 9722

用法

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

:: 關閉回顯

:: 設定標題

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%

:: 建立日誌

:: 備份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.

:: 自動設定計畫任務:每週六 晚上11點執行本指令碼。

at 23:00 /next:s %~f0>>%log%

:: 刪除過期備份

goto delete

:delete

:: 輸出要刪除的目錄到日誌檔案

forfiles /p %svn_backup_root% /m *_* /d -%num% /c "cmd /c echo 刪除資料夾:@file">>%log%

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)

******backup.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%\******backup.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

懶人svn自動更新指令碼

需要更新的svn目錄多,人又想偷懶,不想乙個個點進去勤奮更新 1 首先你得安裝svn 2 多個目錄同時更新 3 需要考慮svn被鎖定需要清理的狀態 參考 參考 暫時沒想到命令列檢測svn是否需要清理的方法 我寫了兩個指令碼,乙個清理所有svn資料夾,乙個更新所有svn資料夾 echo off set...

Windows下的SVN備份

完全備份指令碼 檔名backup.bat echo off rem subversion的安裝目錄 set svn home c program files visualsvn server rem 所有版本庫的父目錄 set svn root d svn 庫目錄 rem 備份的目錄 set bac...

SVN學習之windows下svn的安裝

svn是apache的乙個開源專案,全稱為subversion。是乙個基於版本的專案管理軟體,一般在多人開發的專案中使用,目前svn已經替代了原來的cvs。大多數情況下,svn服務安裝在linux伺服器上。下面簡單的說一下svn在windows服務上的安裝。如下圖 3 把svn安裝目錄裡的bin目錄...