2012-09-01 31 views
2

前段時間我已將我的SVN存儲庫轉換爲Mercurial存儲庫。它似乎正確地轉換了,並且我已經對該項目進行了許多更改。過了一段時間(在挖掘歷史記錄時),我意識到轉換沒有正確完成 - 即舊提交沒有按時間排序,所以我從SVN存儲庫中獲得了所有修訂,但沒有按照正確的順序進行排序(並且我有我的承諾在轉換後)。拆分現有的存儲庫並將最新的提交應用到另一個存儲庫

我想解決這個問題。解決這個的,我能想到的唯一的辦法就是從舊SVN倉庫轉換2次

  • 一個包含修訂分裂庫(我們稱之爲A1
  • 和一個只包含新的提交(我們稱之爲B1

我想再次(正常這個時候將我的SVN倉庫),然後重新申請,是由我做,因爲倉庫被轉換第一次(B1部分)的所有更改。

只是總結了一切,我需要做的(或什麼,我想我需要做的)是:

  1. 拆分現有回購兩種 - 這是由從SVN轉換創造一片(A1),另一部分包含適當的提交(在存儲庫轉換後由我製作 - B1)。

  2. 轉換SVN倉庫到水銀(或Git的,如果由於某種原因,所有其他的步驟是不可行的水銀)。所以在轉換後我會有A2

  3. B1點2將更改應用到新轉換的庫 - A2

我想我知道該怎麼做轉換(2點),以獲得正常有序的提交(A2)。我只需要1幫助(拆分現有資源庫爲A1 & B1)& 3(申請從提交到B1A2)。

那是可行的水銀?如果它在Mercurial中不可行 - 是否可以使用Git實現它(據我所知可以輕鬆地將SVN和Mercurial存儲庫轉換爲Git存儲庫)。

回答

2

我想新的變更是相當線性的。如果他們是,你可以輕鬆地使用MQ來做到這一點。您只需將所有新的變更集轉換爲MQ變更集(qimport),然後將這些變量應用於新轉換的存儲庫之上。

+0

感謝您建議深入瞭解MQ - 迄今爲止我還沒有非常廣泛地使用它。 – MaciekTalaska

1

您應該可以使用strip命令(它是mq extension的一部分)去除所有新的變更集。這將創建所有新變更集的捆綁(該命令將輸出捆綁命令的位置)。您應該能夠使用此捆綁軟件並將其解壓縮(使用unbundle命令)到替換A2存儲庫中。

+0

謝謝你建議'strip'。我會看看它。 – MaciekTalaska

2

convert extension也可以幫助,如果你想創建一個基於現有的存儲庫的子集的新庫。

+0

我之前使用過轉換來擺脫二進制文件(並從歷史中刪除它們)。我明白使用'--rev'開關我可能會將Mercurial存儲庫轉換爲數量有限的修訂版的另一個Mercurial存儲庫。 1.如何將此類回購的提交重新應用到另一個回購? 2.我如何只提取一堆最新的提交(最新,最舊)? – MaciekTalaska

+0

'-splicemap' [option](http://mercurial.selenic.com/wiki/ConvertExtension#A-splicemap)有幫助嗎? –

相關問題