我正在將我的SVN服務器從我的家庭服務器移動到遠程服務器,以便從其他位置更容易地訪問它。 我的遠程服務器沒有備份,所以我想定期備份到我的家庭服務器。如何備份遠程SVN信息庫
遠程服務器是Windows 2003服務器。家庭服務器是Windows Home Server。
這樣做的最好方法是什麼?我可以讓我的家庭服務器每晚都得到遠程服務器的轉儲嗎?帶寬並不是一個巨大的考慮因素,但如果我可以將任何新的簽入複製到我的家庭服務器上的SVN服務器,那就沒問題。
任何建議表示歡迎。
我正在將我的SVN服務器從我的家庭服務器移動到遠程服務器,以便從其他位置更容易地訪問它。 我的遠程服務器沒有備份,所以我想定期備份到我的家庭服務器。如何備份遠程SVN信息庫
遠程服務器是Windows 2003服務器。家庭服務器是Windows Home Server。
這樣做的最好方法是什麼?我可以讓我的家庭服務器每晚都得到遠程服務器的轉儲嗎?帶寬並不是一個巨大的考慮因素,但如果我可以將任何新的簽入複製到我的家庭服務器上的SVN服務器,那就沒問題。
任何建議表示歡迎。
只需使用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
一天一次左右,你只會得到那些尚未存在於你的備份庫中的改變。第一次需要一段時間,但在將備份存儲庫與實際備份存儲庫同步後,只需幾秒鐘即可同步它,因爲只有那些新的修訂需要同步。
如果可以的話,我會對此投票兩次。與在此發佈的其他答案不同,這一個實際上是正確的。 rsync:不能確定以一致的狀態捕獲存儲庫。 bdb存儲庫在各個平臺上不是二進制兼容的。 svnadmin轉儲需要訪問服務器。 – bendin 2010-02-21 19:16:38
如果您在UNIX服務器上運行,請不要忘記賦予您的鉤子執行權限或認爲它失敗:'chmod a + x pre-revprop-change' – 2012-03-08 13:22:41
同樣在UNIX等服務器上,不要忘記在'pre-revprop-change'的頂部添加'#!/ bin/sh'。 – 2012-08-15 20:02:19
埃夫拉伊姆提到的rsync而我寫這篇所以這覆蓋。
如果你不想與工作,Subversion的書提供了svnadmin dump --incremental
選項說明如下:
svnadmin dump --incremental
然而,要成功地做到這一點,你有一個版本號變戲法 - rsync'ing原料庫數據目錄,會比較容易。
困難的部分可能會設置這樣rsync的本地和遠程計算機可以安全通信(即設置了2003服務器上的SSH服務)。 Wim提到的DeltaCopy非常有趣,並且會是我的第一槍;僅用於命令行操作,這裏是關於how to get Rsync running as a service on Windows 2003的howto。
雖然使用rsync的問題是,如果您在複製存儲庫而有人正在進行更改時,副本可能會損壞。 svnsync比複製存儲庫更安全。 – darrickc 2010-08-12 14:15:48
是的svnsync將是首選的解決方案。它只支持SVN服務器,因爲我認爲1.6版本,但現在似乎被廣泛部署。 – Wim 2010-08-13 09:14:55
儘管您的答案可能沒有問題,但在@darrickc提到的鎖定問題旁邊還有另一個缺點:它還需要對svn repo進行文件系統級訪問。在大多數情況下,它只是一個svn://或http(s):// url。 – peterh 2016-03-31 14:37:20
創建本地資源庫
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
我會用任何svnsync
或svnadmin hotcopy
因爲這兩種技術都保證從資源庫中複製的有效數據,交易正在進行中。其他文件同步技術可能不如可靠,這取決於存儲庫格式。
作爲顛覆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
或類似的程序可能顯著減少輸出文件的大小。
Soooo快得多。太棒了。 – Qix 2016-03-30 04:57:35
在Mac OS X 10.10,該svnrdump
命令位於:
/Library/Developer/CommandLineTools/usr/bin/svnrdump
然後,您可以joesdiner使用上面的答案。
感謝您的快速回復。我認爲SVNSync將完全按照我的意願去做。 Pekka - 你說得對,如果我想到了它,Serverfault可能會更好地問這個問題。我在這裏得到如此好的快速答案,我沒有考慮其他網站。 再次感謝。 – Roaders 2010-02-20 15:36:02
Asca'! Cazzo!美國questo comando! (schherzo):-) – 2018-02-08 13:43:07