2010-02-20 125 views
45

我正在將我的SVN服務器從我的家庭服務器移動到遠程服務器,以便從其他位置更容易地訪問它。 我的遠程服務器沒有備份,所以我想定期備份到我的家庭服務器。如何備份遠程SVN信息庫

遠程服務器是Windows 2003服務器。家庭服務器是Windows Home Server。

這樣做的最好方法是什麼?我可以讓我的家庭服務器每晚都得到遠程服務器的轉儲嗎?帶寬並不是一個巨大的考慮因素,但如果我可以將任何新的簽入複製到我的家庭服務器上的SVN服務器,那就沒問題。

任何建議表示歡迎。

+0

感謝您的快速回復。我認爲SVNSync將完全按照我的意願去做。 Pekka - 你說得對,如果我想到了它,Serverfault可能會更好地問這個問題。我在這裏得到如此好的快速答案,我沒有考慮其他網站。 再次感謝。 – Roaders 2010-02-20 15:36:02

+0

Asca'! Cazzo!美國questo comando! (schherzo):-) – 2018-02-08 13:43:07

回答

113

只需使用svnsync命令。

首先,在您的家用機器上創建一個新的存儲庫。

svnadmin create c:\backuprepo 

或UNIX:

svnadmin create ./backuprepo 

接下來,創建一個文件中指定的pre-revprop變化。蝙蝠:

echo exit 0 > c:\backuprepo\hooks\pre-revprop-change.bat 

或UNIX:

echo -ne '#!/bin/sh\nexit 0' > /backuprepo/hooks/pre-revprop-change 

然後,初始化同步:

svnsync init file:///c:/backuprepo https://url/of/your/repository 

或UNIX:

svnsync init file:///Volumes/volumelabel/backuprepo https://url/of/your/repository 

之後,你可以簡單地運行

svnsync sync file:///c:/backuprepo 

一天一次左右,你只會得到那些尚未存在於你的備份庫中的改變。第一次需要一段時間,但在將備份存儲庫與實際備份存儲庫同步後,只需幾秒鐘即可同步它,因爲只有那些新的修訂需要同步。

+4

如果可以的話,我會對此投票兩次。與在此發佈的其他答案不同,這一個實際上是正確的。 rsync:不能確定以一致的狀態捕獲存儲庫。 bdb存儲庫在各個平臺上不是二進制兼容的。 svnadmin轉儲需要訪問服務器。 – bendin 2010-02-21 19:16:38

+7

如果您在UNIX服務器上運行,請不要忘記賦予您的鉤子執行權限或認爲它失敗:'chmod a + x pre-revprop-change' – 2012-03-08 13:22:41

+6

同樣在UNIX等服務器上,不要忘記在'pre-revprop-change'的頂部添加'#!/ bin/sh'。 – 2012-08-15 20:02:19

2

可以的轉儲信息庫的遠程服務器,然後將其複製到本地計算機上使用腳本(或使其在預定位置本地計算機複製)

您可以同步備份目錄rsyncscp

該腳本可以使用「任務計劃」中運行,並且能夠產生獨特的命名備份文件,這將是你的本地計算機在上面提到的方式後來被同步。 (然後可能刪除)

2

埃夫拉伊姆提到的rsync而我寫這篇所以這覆蓋。

如果你不想與工作,Subversion的書提供了svnadmin dump --incremental選項說明如下:

然而,要成功地做到這一點,你有一個版本號變戲法 - rsync'ing原料庫數據目錄,會比較容易。

困難的部分可能會設置這樣rsync的本地和遠程計算機可以安全通信(即設置了2003服務器上的SSH服務)。 Wim提到的DeltaCopy非常有趣,並且會是我的第一槍;僅用於命令行操作,這裏是關於how to get Rsync running as a service on Windows 2003的howto。

6

rsync(或DeltaCopy這是一個在其上的Windows用戶界面)將是在文件系統級增量複製整個存儲庫的不錯選擇。

您還可以使用svnsync直接從一個SVN服務器複製新版本到另一個。

+2

雖然使用rsync的問題是,如果您在複製存儲庫而有人正在進行更改時,副本可能會損壞。 svnsync比複製存儲庫更安全。 – darrickc 2010-08-12 14:15:48

+0

是的svnsync將是首選的解決方案。它只支持SVN服務器,因爲我認爲1.6版本,但現在似乎被廣泛部署。 – Wim 2010-08-13 09:14:55

+0

儘管您的答案可能沒有問題,但在@darrickc提到的鎖定問題旁邊還有另一個缺點:它還需要對svn repo進行文件系統級訪問。在大多數情況下,它只是一個svn://或http(s):// url。 – peterh 2016-03-31 14:37:20

10

創建本地資源庫

svnadmin create /Users/jsmith/repo

創建一個空的pre-revprop-change鉤子腳本

echo '#!/bin/bash' > /Users/jsmith/repo/hooks/pre-revprop-change

做出的pre-revprop-change鉤子腳本執行

chmod +x /Users/jsmith/backup/hooks/pre-revprop-change

初始化svnsync的

svnsync init file:////Users/jsmith/repo https://www.smith.com/repo

即使同步回購

svnsync sync file:////Users/jsmith/repo

1

我會用任何svnsyncsvnadmin hotcopy因爲這兩種技術都保證從資源庫中複製的有效數據,交易正在進行中。其他文件同步技術可能不如可靠,這取決於存儲庫格式。

15

作爲顛覆1.7的,你也可以使用新的命令svnrdump。從文檔:

轉儲 - 即生成存儲庫轉儲流 - 位於SOURCE_URL的存儲庫項目的修訂版本,將信息打印到標準輸出。

用法是:

svnrdump dump http://example.com/repos/ > repos.dump 

這將在repos.dump庫的 「轉儲文件」。這是你的資料庫數據,包括歷史的完整備份,但它不是一個顛覆客戶端可以直接讀取。如果您需要恢復這些數據,使用標準svnadmin工具:

svnadmin create c:\backup-repos 
svnadmin load c:\backup-repose < repos.dump 

沒有做過測試,但是這可能最終會被比svnsync慢。svnrdump將每次完成存儲庫的完整轉儲,其中我假設synsync只會導入自上次運行以來存儲庫中的更改。您將擁有包含整個存儲庫的單個文件,這可能會也可能不容易管理。

注意,你可能想管的svnrdump輸出通過gzip或類似的程序可能顯著減少輸出文件的大小。

+0

Soooo快得多。太棒了。 – Qix 2016-03-30 04:57:35

0

在Mac OS X 10.10,該svnrdump命令位於:

  • /Library/Developer/CommandLineTools/usr/bin/svnrdump

然後,您可以joesdiner使用上面的答案。