簡體   English   中英

使用Git-Svn克隆非標准Svn存儲庫

[英]Cloning a Non-Standard Svn Repository with Git-Svn

我對Git比較陌生,但我發現在家工作很容易,我想在我們的項目存儲在Svn存儲庫中的工作中使用它。 不幸的是,存儲庫略微不標准,我無法克隆它們。 當然,它們都有trunk,branches /和tags /,但是在命中實際項目目錄之前,branch /和tags /都有子目錄:

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
  development@1340
  maintenance
  maintenance@1340
  tags/build
  tags/build@1340
  tags/release
  tags/release@1340
  trunk
  trunk@1340 

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

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

非常感謝。

更新:我應該補充一點,我不能批量切換到Git(尚)。 還有其他團隊成員參與和國際存在。 轉型的后勤工作比我更願意承擔,直到我對Git更加滿意; 正如我所提到的,我還是很新的。 我幾乎沒有觸及其功能的表面。

李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

正是我需要的。 感謝所有人的洞察力。

您可以嘗試nirvdrum的svn2git (似乎是最新的),以便將您的svn導入git存儲庫嗎?
(2009年初, Paul提到了這個iteman的svn2git來代替這個原始的jcoglan的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 repo。
它將所有分支和標簽導入為遠程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 (也存在於那里

這個想法依舊:

  • SVN作為中央存儲庫工作。

  • Git“在其他地方”快速在多個Git私有分支機構中進行實驗。

  • 導入合並的Git分支到官方SVN分支。

對於普通通配符不提供的回購布局:(來自 對此相關問題的回答

當前的git-svn聯機幫助頁說:

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

[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/*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM