2009-02-21 112 views
37

我是比較新的混帳,但我發現它很容易在家裏,我想在工作中使用它的工作,其中我們的項目存儲在Svn倉庫。不幸的是,這些軟件庫稍微不標準,我無法克隆它們。當然,他們都擊中真正項目目錄之前,樹幹,樹枝/和標籤/,但分支/和標籤/有子目錄:克隆非標SVN倉庫使用Git,SVN

trunk/ 
branches/maintenance/release1 
branches/maintenance/release2 
... 
branches/development/feature1 
branches/development/feature2 
... 
tags/build/build1 
tags/build/build2 
... 
tags/release/release1 
tags/release/release2 

克隆後:

$ git svn clone -s --prefix=svn/ https://mydomain.com/svnproject 
$ git branch -r 
    development 
    [email protected] 
    maintenance 
    [email protected] 
    tags/build 
    tags/[email protected] 
    tags/release 
    tags/[email protected] 
    trunk 
    [email protected] 

我得到無的實際項目分支或標籤。我實際上需要能夠在幹線,一個維護分支和一個開發分支上工作。我已經嘗試了這種方法,除了在修改配置幾個黑客,但沒有任何工作對我來說。

有什麼方法可以將我的非標準Svn項目的關鍵組件移到本地git存儲庫中,以便我可以輕鬆地在它們之間移動?

非常感謝。

更新:我應該補充說,我不能做批發切換到Git(還)。還有其他團隊成員參與和國際存在。過渡的物流比我願意承擔的要多,直到我對Git更加舒適;正如我所提到的,我仍然很新。我幾乎沒有抓住其能力的表面。

回答

34

李B是對的。 doener在#git中提供的答案是將Git升級到1.6.x(我一直使用1.5.x)。 1.6.x版提供了深刻的克隆,以便多個通配符可以用--branches選項一起使用:

$ git svn clone https://svn.myrepos.com/myproject web-self-serve \ 
      --trunk=trunk --branches=branches/*/* --prefix=svn/ 
$ git branch -r 
    svn/development/sandbox1 
    svn/development/feature1 
    svn/development/sandbox2 
    svn/development/sandbox3 
    svn/development/model-associations 
    svn/maintenance/version1.0.0 
    svn/trunk 

正是我需要的。感謝所有人的見解。

13

你可以試試nirvdrum's svn2git(看來是最新的)爲了將你的svn導入到git存儲庫嗎?
(2009年初,Paul提到這個iteman's svn2git替代這個original jcoglan's svn2git的,這是,因爲他的作者提到:「一個快速的黑客把我的代碼移出Subversion 」)

它比git svn clone因爲更好如果你有這樣的代碼SVN:

trunk 
    ... 
    branches 
    1.x 
    2.x 
    tags 
    1.0.0 
    1.0.1 
    1.0.2 
    1.1.0 
    2.0.0 

git-svn將通過提交歷史建立一個新的git回購。
將導入所有分支和標籤作爲遠程svn分支,而你真正想要的是git-native本地分支和git標籤對象
所以導入此項目後,您將獲得:

$ git branch 
    * master 
    $ git branch -a 
    * master 
    1.x 
    2.x 
    tags/1.0.0 
    tags/1.0.1 
    tags/1.0.2 
    tags/1.1.0 
    tags/2.0.0 
    trunk 
    $ git tag -l 
    [ empty ] 

svn2git與您的項目完成後,你會得到這個代替:

$ git branch 
    * master 
    1.x 
    2.x 
    $ git tag -l 
    1.0.0 
    1.0.1 
    1.0.2 
    1.1.0 
    2.0.0 

當然,這種解決方案不意味着單程旅行。

你總是可以回到你的svn倉庫,...git2svn(也present there

的想法依然是:

  • SVN工作作爲一箇中央存儲庫。

  • Git「別處」可以在多個Git-private分支之間快速實驗。

  • 進口回只有整合的Git分支進入官方SVN分支。

+0

我在與我的問題類似的其他帖子上看到此評論。不幸的是,我認爲這不會起作用(儘管我一定會仔細看看svn2git)。我需要直接與Svn回購互動。還有其他團隊成員沒有準備好Git。 – 2009-02-21 12:34:49

+0

+1 - 當我學習git時,我遇到了類似的問題,直到我使用svn2git設置了一個新的repo,並且問題消失了。更多最新版本可在http://github.com/iteman/svn2git/tree/master上找到。 – Paul 2009-02-21 17:58:52

+0

@VonC - 如果克隆由於網絡不可用而中斷,如何重新啓動克隆? – notionquest 2016-09-28 15:43:28

9

對於不是由普通的通配符擔任回購佈局:(從my answerthis related question

current git-svn manpage說:

也可以通過使用 獲取分支或標籤的子集 用逗號分隔的 括號內的名稱列表。例如:

[svn-remote "huge-project"] 
    url = http://server.org/svn 
    fetch = trunk/src:refs/remotes/trunk 
    branches = branches/{red,green}/src:refs/remotes/branches/* 
    tags = tags/{1.0,2.0}/src:refs/remotes/tags/*