2011-03-10 44 views
5

去年我開始使用Git,並且非常喜歡它,因此我正在考慮切換我最大,最活躍的Subversion回購。不幸的是,該回購包含幾個(相關但獨立的)項目。將一個多項目Subversion repo移植到Git的共同主幹上?

有很多很多頁面描述如何轉換單項目回購,但是對於多項目回購很少。事實上,我只有一個foundfew,他們都似乎假設每個項目都有自己的行李箱:

project1/ 
    branches/ 
    tags/ 
    trunk/ 
project2/ 
    branches/ 
    tags/ 
    trunk/ 
project3/ 
    branches/ 
    tags/ 
    trunk/ 

遺憾的是,我的顛覆回購看起來是這樣的:

branches/ 
    *empty* 
tags/ 
    project1-0.9/ 
    project1-1.0/ 
    project1-1.0.1/ 
    project2-0.9/ 
    project2-0.9.1/ 
    project3-0.5/ 
trunk/ 
    project1/ 
    project2/ 
    project3/ 

更糟糕的是,這些標籤都是從工作副本創建的(例如svn copy . svn://example.com/svn/tags/project1-1.0.2),所以包含從未對樹幹進行過的小修改(主要是硬編碼版本號)。此外,還有一些跨越所有項目的提交(許可證更新等)。謝天謝地,至少,沒有合併!

有沒有一種乾淨的方式來解開這些項目,同時保持我的標籤?如果它有幫助,這將是一個單向轉換,隨後Subversion的repo被脫機。

回答

2

我用http://gitorious.org/svn2git/svn2git來做同樣的事情。此工具最初是爲了將巨大的KDE SVN存儲庫轉換爲Git而創建的,BTW也作爲您的存儲庫進行佈局。你所要做的就是編寫一個簡單的控制文件,描述哪些目錄對應於哪個項目和分支。最後,你有一個很好的git倉庫爲你的項目。

雖然有一點需要注意:SVN標籤沒有直接的支持。你將不得不將它們作爲Git分支導入並進行後處理,參見http://gitorious.org/svn2git/svn2git/blobs/master/samples/merged-branches-tags.rules

+0

這個工具聽起來像是有很多的承諾,但我不能爲了我的生活而讓它編譯。 : -/ – 2011-03-11 00:01:23

+0

我在Linux環境下使用它,我從來沒有遇到過編譯它的問題。查看src/src.pro我只能假設原始開發者沒有動力支持其他平臺,因爲這種填充使用共享庫的典型linux路徑。在Linux下,你需要Qt和SVN的開發文件來編譯它。 – sebasgo 2011-03-11 09:19:00

+0

是的,我正在運行Ubuntu服務器,它不想安裝libqt4-devel而沒有安裝X11。 \ *滾動眼睛* *當然,它不會在Windows下編譯。我仍然試圖找到第三種選擇。 :-) – 2011-03-11 17:26:26

0

http://repo.or.cz/w/svn-all-fast-export.git似乎需要廣泛的規則文件,可以整理您的存儲庫。我知道從使用git-svn(雙向),你可以刪除svn回購的大部分沒有問題(包括由於svn根深深地指向存儲庫或通過--ignore-paths忽略部分提交)。

在您製作新的回購之後,如果存在交叉引用,您可以使用git-submodule將背面綁在一起。

+0

我無法讓git-svn忽略例如項目2和項目3克隆project1時。 '--ignore-paths'似乎沒有辦法。 – 2011-03-11 00:27:23