2008-08-28 116 views
190

我是SVN的新手,我想知道在Windows環境中備份存儲庫有哪些方法可用?SVN存儲庫備份策略

+1

VisualSVN服務器的Windows包括了時間表內置功能來備份和驗證SVN倉庫:https://www.visualsvn.com/server/features/backup/ – bahrep 2017-03-23 18:45:18

回答

175

您可以使用類似(Linux的):

svnadmin dump repositorypath | gzip > backupname.svn.gz 

因爲Windows不支持gzip它僅僅是:

svnadmin dump repositorypath > backupname.svn 
+11

我不確定,但是確實有些工具比如7-zip能夠壓縮STDIN中的數據,這意味着你也可以在Windows上使用第一種風格。 – nickf 2009-04-26 12:06:53

+5

我只是在看我自己和一個評論從文檔http://svnbook.red-bean.com/nightly/en/svn.reposadmin.maint.html#svn.reposadmin.maint.backup是你'會得到一個非常大的svnadmin轉儲輸出,除非你使用--deltas選項。 – 2009-10-14 20:22:26

+5

而且Windows不支持gzip,從unxutils網頁http://unxutils.sourceforge.net/ – 2009-10-14 20:24:08

3

我喜歡將整個repo目錄複製到備份位置。這樣,如果發生什麼事情,您可以將目錄複製回來,並立即準備好。

只要確保保留權限,如果需要的話。通常,這只是Linux機器上的一個問題。

+7

這不是如果有人在複製操作中進行提交,則確實很安全 - 即使只有4人可以訪問回購站並且很少使用回收站,我也遇到過這種情況。請參閱Duncan關於使用hotcopy的答案。 – nickf 2009-04-26 12:08:45

+0

但是,如果您完全獨立工作,那麼我認爲這是備份回購的安全方法?我爲我的個人項目使用顛覆,這就是我目前正在做的事情。 – 2011-02-04 02:45:58

11

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH 

此子命令,使您的存儲庫的完全「熱」備份,包括所有的鉤子,配置文件和當然還有數據庫文件。

3

如果您使用的是FSFS版本庫格式(默認),那麼您可以複製庫本身進行備份。使用較舊的BerkleyDB系統時,存儲庫不是平臺獨立的,您通常需要使用svnadmin轉儲。

svnbook documentation topic for backup建議使用svnadmin hotcopy命令,因爲它將處理諸如正在使用的文件等問題。

106

我們使用的svnadmin hotcopy但,如:

svnadmin hotcopy C:\svn\repo D:\backups\svn\repo 

the book

你可以在任何時候運行這個命令,對資料庫的安全拷貝,不管其它進程正在使用存儲庫。

你當然可以ZIP(最好是7-Zip)備份副本。恕我直言,這是最直接的備份選項:在發生災難的情況下,除了將其解壓縮到位之外,幾乎沒有什麼可做的。

19

我使用svnsync,它將遠程服務器設置爲鏡像/從屬。我們有一臺服務器在兩週前停止運行,我可以很輕鬆地將主機切換到主要位置(只需將從屬存儲庫上的UUID重置爲原始位置)。

另一個好處是,同步可以由中間人來運行,而不是作爲任一服務器上的任務運行。我有一個客戶端讓兩個VPN在它們之間同步一個存儲庫。

0

正如其他人所說,從Subversion團隊hot-backup.py擁有超過只是普通svnadmin hotcopy

我一個python腳本運行的計劃任務蜘蛛爲我的機器上的所有存儲庫,以及一些不錯的功能使用hotbackup來保存幾天的hotcopies(腐敗的偏執狂)和一個遠程機器上的svnadmin svndump。到目前爲止恢復非常簡單。

22

這裏是一個Perl腳本,將:

  1. 備份回購
  2. 通過SCP
  3. 檢索備份
  4. 從備份創建一個測試版本庫將其複製到另一臺服務器
  5. 做一個測試結賬
  6. 通過電子郵件與任何錯誤(通過cron)

腳本:

my $svn_repo = "/var/svn"; 
my $bkup_dir = "/home/backup_user/backups"; 
my $bkup_file = "my_backup-"; 
my $tmp_dir = "/home/backup_user/tmp"; 
my $bkup_svr = "my.backup.com"; 
my $bkup_svr_login = "backup"; 

$bkup_file = $bkup_file . `date +%Y%m%d-%H%M`; 
chomp $bkup_file; 
my $youngest = `svnlook youngest $svn_repo`; 
chomp $youngest; 

my $dump_command = "svnadmin -q dump $svn_repo > $bkup_dir/$bkup_file "; 
print "\nDumping Subversion repo $svn_repo to $bkup_file...\n"; 
print `$dump_command`; 
print "Backing up through revision $youngest... \n"; 
print "\nCompressing dump file...\n"; 
print `gzip -9 $bkup_dir/$bkup_file\n`; 
chomp $bkup_file; 
my $zipped_file = $bkup_dir . "/" . $bkup_file . ".gz"; 
print "\nCreated $zipped_file\n"; 
print `scp $zipped_file $bkup_svr_login\@$bkup_svr:/home/backup/`; 
print "\n$bkup_file.gz transfered to $bkup_svr\n"; 

#Test Backup 
print "\n---------------------------------------\n"; 
print "Testing Backup"; 
print "\n---------------------------------------\n"; 
print "Downloading $bkup_file.gz from $bkup_svr\n"; 
print `scp $bkup_svr_login\@$bkup_svr:/home/backup/$bkup_file.gz $tmp_dir/`; 
print "Unzipping $bkup_file.gz\n"; 
print `gunzip $tmp_dir/$bkup_file.gz`; 
print "Creating test repository\n"; 
print `svnadmin create $tmp_dir/test_repo`; 
print "Loading repository\n"; 
print `svnadmin -q load $tmp_dir/test_repo < $tmp_dir/$bkup_file`; 
print "Checking out repository\n"; 
print `svn -q co file://$tmp_dir/test_repo $tmp_dir/test_checkout`; 
print "Cleaning up\n"; 
print `rm -f $tmp_dir/$bkup_file`; 
print `rm -rf $tmp_dir/test_checkout`; 
print `rm -rf $tmp_dir/test_repo`; 

Script source and more details about the rational for this type of backup.

10

svnbackup了在谷歌代碼,一個.NET控制檯應用程序。

4

有兩種主要的方法來備份svn服務器,第一種是hotcopy,它會創建你的存儲庫文件的副本,這種方法的主要問題是它保存有關底層文件系統的數據,所以你可能會有一些嘗試在另一臺svn服務器或另一臺機器上重新發布這種備份的困難。 還有另一種類型的備份稱爲轉儲,這不會備份保存底層文件系統的任何信息和飲用水,以立足tigiris.org顛覆任何類型的SVN服務器。

你可以使用svnadmin工具中的備份工具(這是能夠做到即時拷貝和轉儲)從命令提示符,這個控制檯駐留在同一目錄下你的svn服務器的生活,或者你可以谷歌SVN備份工具。

我的建議是,你可以進行兩種備份並將它們從辦公室轉移到您的電子郵件帳戶,亞馬遜s3服務,ftp或azure服務,這樣您將擁有安全備份,而無需託管svn服務器在你辦公室外的某處。

1

我編我遵循的把我的項目的遠程SVN 存儲庫的備份目的的步驟。

install svk (http://svk.bestpractical.com/view/SVKWin32) 

install svn (http://sourceforge.net/projects/win32svn/files/1.6.16/Setup-Subversion-1.6.16.msi/download) 

svk mirror //local <remote repository URL> 

svk sync //local 

這需要時間,並說,這是從獲取存儲庫中的日誌。它在C:\Documents and Settings\nverma\.svk\local內創建一組文件。

要更新最新的一組從遠程一個變化的這個本地倉庫,剛剛從時間運行前面的命令時。

現在你可以用你的本地庫(/home/user/.svk/local在這個例子中)玩,就好像它是一個正常的SVN倉庫!

用這種方法唯一的問題是,本地倉庫與通過在遠程倉庫的實際修訂修訂增量創建。正如有人寫道:

svk miror命令在剛剛創建的存儲庫中生成一個提交。因此,與遠程公共存儲庫相比,後續同步創建的所有提交將修訂號增加1。

但是,這對我來說是好的,因爲我只想要一次備份遠程存儲庫,沒有別的。

驗證:

要驗證,使用SVN客戶端與本地存儲庫這樣的:

svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/" <local-dir-path-to-checkout-onto> 

此命令然後去從本地庫中檢出最新版本。最後它說Checked out revision N。此N比在遠程存儲庫中發現(由於上面提到的問題)的實際修改一個。

爲了驗證svk是否帶來了所有的歷史記錄,SVN結帳使用-r和2,10,50等等,在各種舊版本中運行。然後確認<local-dir-path-to-checkout-onto>中的文件來自該修訂版。

最後,壓縮的目錄C:/Documents and Settings\nverma/.svk/local/和一些地方保存拉鍊。定期繼續這樣做。

2
@echo off 
set hour=%time:~0,2% 
if "%hour:~0,1%"==" " set hour=0%time:~1,1% 
set folder=%date:~6,4%%date:~3,2%%date:~0,2%%hour%%time:~3,2% 

echo Performing Backup 
md "\\HOME\Development\Backups\SubVersion\%folder%" 

svnadmin dump "C:\Users\Yakyb\Desktop\MainRepositary\Jake" | "C:\Program Files\7-Zip\7z.exe" a "\\HOME\Development\Backups\SubVersion\%folder%\Jake.7z" -sibackupname.svn 

這是批處理文件我已經運行執行我的備份

5

基本上它是安全的,如果svn的服務器停止複製的存儲庫文件夾。 (來源:https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D

所以,如果你被允許停止服務器,做到這一點,剛纔複製的資源庫,無論是與一些腳本或備份工具。 Cobian備份很好地適合在這裏,因爲它可以停止和自動啓動的服務,並且它可以做增量備份,所以你只備份最近更改過的存儲庫的部分(有用的,如果存儲庫是大,你是備份到遠程位置)。

實施例:

  1. 安裝Cobian備份
  2. 添加備份任務:

    • 集源到存儲庫文件夾(例如C:\Repositories\),

    • 添加預備份事件"STOP_SERVICE"的VisualSVN,

    • 根據需要添加備份後的事件,"START_SERVICE"的VisualSVN,

    • 設置其他選項。 我們設置了增量備份,包括刪除舊備份,備份計劃,目的地,壓縮包括。檔案分割等

  3. 利潤!

3

對於託管庫你可以從SVN版本1.7使用svnrdump,它類似於svnadmin dump爲本地存儲庫。這article提供了一個很好的步行通過,基本上可以歸結爲:你已經下載了該轉儲文件後

svnrdump dump /URL/to/remote/repository > myRepository.dump 

可將其導入本地

svnadmin load /path/to/local/repository < myRepository.dump 

或上傳到您選擇的主機。

4

這裏的GUI的Windows工具,讓本地和遠程Subversion版本庫的轉儲:

https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html

工具介紹說:

這只是工具,允許做的轉儲備份本地和遠程Subversion存儲庫。該軟件的工作方式與「svnadmin」相同,但不是GUI前端。而是直接使用Subversion庫來允許在獨立模式下創建轉儲,而無需任何其他附加工具。

希望這有助於...

0

1.1 SVN(顛覆)存儲庫中創建轉儲

svnadmin dump /path/to/reponame > /path/to/reponame.dump 

真實的例子

svnadmin dump /var/www/svn/testrepo > /backups/testrepo.dump 

1.2 Gzip已創建轉儲

gzip -9 /path/to/reponame.dump 

實例

gzip -9 /backups/testrepo.dump 

1。3 SVN轉儲和gzip用一行代碼

svnadmin dump /path/to/reponame | gzip -9 > /path/to/reponame.dump.gz 

真實的例子轉儲

svnadmin dump /var/www/svn/testrepo |Â gzip -9 > /backups/testrepo.dump.gz 

如何備份(轉儲)和恢復(裝載)SVN(顛覆)庫在Linux上。
編號:svn subversion backup andrestore