2012-10-22 69 views
7

我必須在兩個存儲庫上工作,並且希望在保留修訂歷史的同時移動兩個代碼之間的代碼。SVN在兩個存儲庫之間移動具有歷史記錄的代碼

我在這裏讀了幾個關於SO的問題,但我還不確定要走哪條路。我們的倉庫是巨大(文件(orkingcopy)不包括修訂>幾GB),因爲一切都在(代碼+ designdata + ...)。

到目前爲止,我所看到的解決方案是:

  1. svnadmin的轉儲+過濾+進口:不是一種選擇,由於庫的大小
  2. svnsync的:我們已經在第二庫數據(倉庫已經很大,我不認爲將它們合併是一個好主意,除了不是我的工作的decidng),並且從我收集的這個需要第二個倉庫是空的。
  3. Third Party Solution:反覆崩潰,因爲它不能刪除文件,因爲「文件打開另一個進程事呢」(enevthough我可以刪除通過OS的文件,它就會通過腳本創建)

有沒有其他的解決方案,對此的方法,還是我錯過了解決方案之一?

+1

爲什麼第一個選項是問題?您可以通過過濾器傳遞轉儲而不保存到文件。 –

+0

@DmitryPavlenko:考慮到版本庫大約20Gb檢出並且版本號目前是6位數(112 xxx),轉儲必須大得多。轉儲完整的存儲庫以移動一個大小爲幾兆的代碼目錄似乎過度。這給系統帶來了很多不必要的壓力(查看每個版本/轉儲=>「複製」200G或更多(必須檢查repro大小)=>在200G數據上運行過濾器。如果你認爲這會 – ted

+0

@DmitryPavlenko:簡而言之,我不確定自己擁有200G(不是管理員只是一個用戶),網絡的影響和開銷。現在考慮我想在這個數據移動時繼續工作,但是如果在同時有版本庫訪問的情況下,svn dump會做什麼? – ted

回答

7

svnadmin dump + filter + import即使在大型軟件倉庫中也能正常工作。

你需要做一些事情來提高性能。 找出哪個修訂版是最先創建您想要複製的文件夾的版本。然後檢查日誌以查找修改該文件夾中任何內容的最新修訂。您只需要轉儲該範圍內的修訂。

將--incremental標誌用於svndump。

不要嘗試在SVN轉儲中使用Deltas標誌。 SvnDumpFilter不適用於使用「deltas」創建的轉儲。 不要試圖將巨大的轉儲保存到文件,並在該文件上運行SvnDumpFilter。相反,用管子一步完成。

如果你開始的版本是10000和您的最終版本是20000,你想複製是項目/源路徑,命令應類似於

svnadmin dump --incremental -r10000:20000 YourRepoPath | svndumpfilter include projects/source --drop-empty-revs --renumber-revs > source.dump 

後跟用svnadmin load命令加載轉儲進入你的其他回購。

+0

我可以使用存儲庫線上?畢竟我限制了最後一次修訂。 – ted

+0

是的,您可以在線執行轉儲並加載存儲庫。 – maddoxej

相關問題