2011-06-21 53 views
2

回過頭來,我們將Subversion版本庫移到一個新服務器(「B」),期望舊版本(「A」)退役。是否有可能將修訂從一個Subversion版本庫「附加」到另一個版本中?

那麼,服務器/存儲庫從來沒有真正退休,而我不知道,源控制下的許多項目之一從未得到其工作副本引用更新。換句話說,所有這個項目(以及那個項目)的變化已經被提交到舊服務器。

已經有沒有任何更新到服務器上特定項目,所以沒有實際來源的任何衝突的機會。但是,顯然,版本號將會不一致。

是否有可能將提交到存儲庫A的更改合併到存儲庫B中?

基本上我要求的是類似的問題,How to combine two branches from two different repositories into a single repository?除了這是Subversion,不是git,並且實際上沒有任何分支,只有一組變更都被提交到trunk(在錯誤的存儲庫中)。

不需要需要連續同步,這只是一個一次性的操作,在舊的存儲庫最終真正退休之前。而且我更願意提出有關項目的整個修訂歷史,即不是將最新版本作爲一個大規模修訂版提交。

以防萬一的問題並不完全清楚,這裏是一個視覺:

Repository A 
    Project X: Rev 1 -> Rev 2 -> Rev 3 
    Project Y: Rev 4 -> Rev 5 -> Rev 6 

Repository B: 
    Project X: Rev 1 -> Rev 2 -> Rev 3 -> Rev 4 -> Rev 5 -> Rev 6 
              |  |  | 
Expected outcome for Repository A:   v  v  v 
    Project X: Rev 1 -> Rev 2 -> Rev 3 -> Rev 7 -> Rev 8 -> Rev 9 
    Project Y: Rev 4 -> Rev 5 -> Rev 6 

我只是想對所有到B的存儲庫版本爲A的樹(並且只有部分)的一個組成部分的複製,並保持一切。如果有必要,我確定X的修訂看起來像B上的新修訂版。

解決方案?

回答

4

您可以使用svnadmin dump獲取整個存儲庫的轉儲,然後使用svndumpfilter僅生成某個存儲庫路徑的轉儲。然後使用svnadmin load將結果文件導入到新的存儲庫中。

下面是一些例子:http://daveharris.wordpress.com/2008/08/05/svn-dump-parts-of-a-repository/

+1

對於任何遇到此問題的人來說:這是行得通的,但**爲svndumpfilter添加'--drop-empty-revs'選項**非常重要,如果您只是爲了部分這個版本庫,否則你最終會得到一大堆空的版本。 – Aaronaught

2

只要在這兩個倉庫的變化確實不重疊,你可以這樣做:

svnadmin dump --incremental -r4:6 /repository/B | svnadmin load /repository/A

創建修訂7,8和9在存儲庫A中,保留作者,時間戳等。

--incremental確保傾銷的更改與修訂版本3相關,該修訂版本應該與已經在回購(爲了安全起見,我會首先用一次性存儲庫A的一次性拷貝來測試它。)

相關問題