2010-01-12 33 views
3

我甩我的倉庫加載的svn倉庫缺少前幾個版本 - 我該如何解決這個問題?

svnadmin dump repos > repos.dump 

然後我裝好了新機

svnadmin load newrepos < repos.dump 

上,完成後新的存儲庫中缺少最後幾百修訂。

我可以檢查repos.dump以查看它是否缺少修訂版嗎?我可以轉儲丟失的修訂版並將它們加載到新的存儲庫中嗎?或者,我是否必須從頭開始。

從頭開始將是一個痛苦,因爲存儲庫是3GB,我必須以適中的低速度通過互聯網抓住它!

編輯:已解決 - 操作員錯誤!

因此,我忘記了我已經遷移了一次存儲庫(從account1到account2),並且我從未刪除過account1存儲庫。我有一個bash函數來快速ssh到我的遠程帳戶,它默認登錄到account1(我沒有想到),因爲我看到存儲庫我認爲一切都很好,因此將轉儲發送到account3(再次使用一個別名,所以我沒有注意到我在錯誤的帳戶)。

現在,我打算在終端中以明亮的紅色將帳戶的用戶名放在終端中,而我正在緩存舊版本庫,而不是讓它們四處閒逛。而且,我正在取消我的個人資料黑客的默認用戶方面。

但是,我能夠使用--incremental將缺少的修訂轉移到新的位置。所以,所有的建議仍然有幫助。

+0

你正在加載到一個完全乾淨的新庫嗎? – kdgregory 2010-01-12 20:20:05

+0

是的,這是全新的。 – bias 2010-01-12 22:48:04

回答

4

我猜你的轉儲大於4 GB(因爲默認情況下轉儲沒有使用deltas保存,所以它們可能比repo大得多),並且轉儲轉儲過程的某些步驟被截斷爲4 GB,這是某些文件系統(也可能在某些協議中)的最大文件大小。根據您使用的文件傳輸方式,這個過程的某個步驟也可能會將其截斷爲2 GB。

您可以通過檢查文件來檢查;它應該有修訂號碼,你可以看到他們有多高。

您可以使用--incremental選項svnadmin dump來產生增量轉儲,而不是將您加載到新回購的最後一次良好修訂開始。將增量轉儲加載到現有存儲庫中應該可以正常工作。你會做類似

svnadmin dump --incremental -r 1234:HEAD > repos.2.dump 
# Transfer to new system 
svnadmin load < repos.2.dump 
+1

+1 - 4Gb文件大小。在dump命令上拋出'--deltas'也是一個好主意。 – kdgregory 2010-01-13 01:49:16

1

我可以檢查repos.dump以查看它是否缺少修訂版嗎?

是的。有像

 
Revision-number: XYZ 

在轉儲文件中。

我可以轉儲丟失的修訂版並將它們加載到新的存儲庫中嗎?

是的。您可以使用svnadmin load將修訂提交到新的或現有的存儲庫。

1

它應該將修訂號碼寫入命令行,因爲它正在執行轉儲。這就是我所得到的,即使在重定向到文件時也是如此。

您可以檢查文件本身並查找Revision-number:以查看其中實際有哪些修訂。

1

要驗證所有修訂是否在您的轉儲文件中,請輸入grep for「Revision-number」。您也可以在文本編輯器中打開文件以檢查是否有明顯的損壞,但是do not save it

我發現svnadmin load失敗的主要原因是您嘗試加載到已有內容的存儲庫中。加載命令將檢查以確認存儲庫在獲取轉儲文件之前處於預期狀態。我在轉儲資源庫時通過使用--incremental標誌解決了此問題。

1

就我個人而言,我會再次傾倒它。我最喜歡的答案是最初的轉儲沒有成功完成 - 轉儲運行後,您是否在命令行中看到任何錯誤?如果你想去檢查轉儲本身,看看這個幫助:http://www.troyhunt.com/2009/12/black-art-of-splitting-subversion.html

你可以考慮的另一件事是隻是將原始回購轉移到目標位置。您將複製數據的壓縮版本,因此該過程將比複製轉儲更快(不確定是否在傳輸之前將其壓縮)。