2010-11-17 158 views
17

我們正在從Subversion遷移到Mercurial,並且在SVN-> Hg轉換過程中碰到了一個障礙。目前,我們的單個SVN回購存儲了幾個不同「項目」的代碼,我們希望在遷移過程中將它們分開。我們SVN回購的組織結構:將Subversion版本庫拆分爲多個Mercurial存儲庫?

. 
|-- proj1 
| |-- branches 
| |-- tags 
| `-- trunk 
`-- proj2 
    |-- branches 
    |-- tags 
    `-- trunk 

,我們想簡單地使proj1proj2自己的汞回購。當然,我們希望proj1的歷史記錄不會出現在proj2的日誌中。現在,當hg convert進行轉換時,它只是非常笨拙地讀取所有文件,甚至不區分分支和中繼。

目錄過濾和識別hg convert中的SVN分支的過程是什麼?

+1

+1這是一個非常重要的問題,在很多公司都很重要。 – 2010-11-17 23:43:02

+0

@Andres Jaan Tack:爲什麼在項目開始時沒有將項目組織爲分開的存儲庫呢? – zerkms 2010-11-18 00:09:18

+1

@erjiang:如果你很高興使用svn在1個repo中使用2個項目,爲什麼不遵循相同(不正確)的schema和mercurial?;-))) – zerkms 2010-11-18 00:11:05

回答

8

由於ConvertExtension wiki page的緣故,我已經掌握了它的工作原理!

我試過了Ry4an的方法,但是它帶來了不得不先將SVN回購轉換爲中間Mercurial回購之前分解所有內容的缺點,並且分支,主幹和標籤未被識別,因爲有兩個項目每個都有自己的分支,主幹和標籤。

我發現手動指定樹枝,樹幹和標籤目錄從SVN轉換一個項目在一個時間含汞偉大的工作:

hg \ 
--config convert.svn.trunk=proj1/trunk \ 
--config convert.svn.branches=proj1/branches \ 
--config convert.svn.tags=proj1/tags \ 
convert --authors authors.txt original-svn-dir hg-proj1 

這將需要承認的護理SVN分支,標籤和中繼線只能同時修改proj1。然後,我只是重複它爲proj2

+0

很高興你能工作。多個svn-> hg對話的缺點是svn-> hg片段比hg-> hg片段要長得多,所以考慮到獲得authormaps,split等的迭代性質,正確地執行svn-> hg一次,並且爲每個項目做(並重做)hg-> hg通常可以節省時間。另外,如果你打算使用convert的支持進行增量轉換(即:在一個月內再次執行此操作以引入新的svn內容而不改變hg hashids),則需要單個svn轉換。 – 2010-11-18 14:58:21

+0

這是一個本地 - >本地轉換,所以它在時間上並不是太差。 – erjiang 2010-11-18 15:29:29

0

按照您的建議,使用'convert'擴展名可以輕鬆完成。以下是過程:

  1. 從SVN做hg convert SVNREPO all-in-one-mercurial-repo一切含汞
  2. 做多hg convert --filemap projectfilemap.txt all-in-one-mercurial-repo project-repo命令 - 每個項目

那些filemaps一個已經在他們行這樣的:

exclude proj1 
rename proj2 . 

這將是當從一體化mercurial回購中提取項目二的回購時使用的filemap。您可能需要列出這些地圖中的每個單獨文件,但我認爲目錄沒問題。

這裏還有另外一個問題,在這裏我回答了幾乎相同的事情,並粘貼了一個完整的例子,但這應該足以讓你去。

+0

也許可以發佈前一個問題的鏈接? – erjiang 2010-11-18 03:21:15

+0

哦,也可以轉換理解git-svn之類的分支嗎? – erjiang 2010-11-18 03:24:23

+0

是的,如果你已經使用了正常的branches /,tags /,trunk/tree結構,它就可以很好地完成它們。 – 2010-11-18 03:31:31

相關問題