2010-10-21 84 views
1

我試圖解決的問題與Subversion out of sync with production code, easiest way to update subversion沒有什麼不同,但有所不同。從CVS重新導入到Subversion

我轉換一個(Java)的項目從CVS到SVN(使用cvs2svn,保留完整的歷史) - 在1.00版本

發展對2.00版本與SVN代碼繼續說。

與此同時,一些修復在CVS中進行(作爲開發工具的設置是不同的。)

現在,我需要做的實際上是從CVS項目的重新導入部分。

如果我有

cvs:project/module1 (version 1.00) 
      /module2 (version 1.10) 

svn:project/trunk/module1 (version 2.xx) 
       /module2 (Version 1.00) 

是否存在的只是重新進口從CVS模塊2和保留完整的歷史呢?

我已經在CVS存儲庫上再次運行cvs2svn,並將其作爲另一個項目加載到SVN中,然後進行無根據的合併 - 但我不確定這是否是一個好主意。

我將在SVN中繼續維護版本1.xx。

回答

0

您可以將當前的CVS回購轉換爲新的虛擬SVN回購。使用它,你可以選擇修改版本來轉儲和重放這些轉儲回到真正的SVN回購。 (我不知道這將如何處理相同的文件在真正的SVN和CVS /虛擬SVN中都被改變的情況,你可能想避免通過重新選擇櫻桃選擇的轉儲來查找特定的文件分支)。

雖然可能有更好的方法,但這可能根本不起作用。我只有一次將一個CVS回購轉換爲SVN回購,這是一個痛苦的一次性任務。所以先用大量的鹽和乾燥的副本先做好。

+0

這聽起來很痛苦,我很擔心可溯源的導入轉儲。 – exception 2010-10-21 16:31:08

+0

@exception:你的意思是什麼,「可追溯」? – sbi 2010-10-23 14:47:40

+0

保留歷史。我目前正在考慮將從原始遷移後創建的V1.x中的特定變更列表合併到SVN中,或者我可能會簡單地複製整個模塊。 – exception 2010-10-24 18:17:58

0

由於我要在SVN中維護1.xx版本,並且我知道代碼在哪一點出現分歧,所以我應該只能將遷移後創建的更改列表合併到SVN中。 這看起來會保持最整潔。

我現在正在試驗。

+0

事實證明,這導致了太多的衝突,除非我非常小心地選擇變更列表的範圍。 – exception 2010-10-26 16:19:40

0

從您引用的版本號看來,module1上的所有轉換後提交都在Subversion中,而module2上的所有轉換後提交都在CVS中。如果是這種情況,您可以嘗試以下操作:

使用與以前相同的cvs2svn選項再次轉換整個CVS項目。如果幸運的話,得到的Subversion版本庫中的r0:rN(其中N是某個數字)將與第一次轉換產生的Subversion版本庫的重疊部分一致。在這種情況下,您應該能夠從新的Subversion存儲庫中「svnadmin dump --incremental -rN:HEAD」,並將svnadmin加載到舊的Subversion存儲庫之上。組合存儲庫中的提交不會按時間順序排列,但這是一個小小的煩惱(並且可能會使用其他工具來修復,以重新編寫Subversion提交爲代價)。(不一定是Subversion版本庫的重疊部分是相同的; cvs2svn使用一些啓發式來推斷更改集,並且它們的推導可能會因其他更改而有所不同,但只要有可識別的「1.00」每個存儲庫中的內容相同,然後我認爲這個過程應該可以工作。)

在嘗試此操作之前進行備份!