給定一個包含許多分支的大型Subversion版本庫,我想先開始使用git-svn
,先克隆trunk
,然後再添加特定的分支。我看到至少有三種方法可以做到這一點,但是他們中的任何一個都是「官方」的還是有最好的方法呢?在克隆git-svn中的主幹之後克隆分支的最佳方法是什麼?
假設以下佈局:
https://svn-repo.com/svn/company
+--core
| +--trunk
| +--branches
| | +--fastboot
| | +--playground
| +-tags
+--mobile
+--trunk
+--branches
+--tags
因此,克隆只有中繼線(沒有分支機構)項目core
的修訂12345:
$ git svn clone --username=svnuser -r 12345 -Ttrunk https://svn-repo.com/svn/company/core
這將克隆項目core
到的目錄同名並運行git svn rebase
將拉動所有更改(修改後的12345)。此時.git/config
應該有這樣的東西在裏面:
[svn-remote "svn"]
url = https://svn-repo.com/svn/company
fetch = core/trunk:refs/remotes/trunk
到目前爲止好。現在,我們假設我想添加playground
分支。這是它有點朦朧。
選項1:通過添加有分支更新中.git/config
現有的遠程:
[svn-remote "svn"]
url = https://svn-repo.com/svn/company
fetch = core/trunk:refs/remotes/trunk
branches = core/branches/{playground}:refs/remotes/branches/*
在這一點上,我是能夠做到:
拉分支的修訂版23456
playground
$ git svn fetch -r 23456
創建一個本地分支,並切換到它的最新變化
$ git checkout -b playground branches/playground
拉:
$ git svn rebase
選項2:在.git/config
添加新的遠程(除了現有的一個):
[svn-remote "playground"]
url = https://svn-repo.com/svn/company
fetch = core/branches/playground:refs/remotes/playground
從這裏,步驟類似於的那些從選項1:
$ git svn fetch playground -r 23456
$ git checkout -b playground remotes/playground
$ git svn rebase
選項3:我也看到有人加入現有的遠程在一個新的獲取:
[svn-remote "svn"]
url = https://svn-repo.com/svn/company
fetch = core/trunk:refs/remotes/trunk
fetch = core/branches/playground:refs/remotes/branches/playground
我並不完全確定這是否正確,或者它是否能夠正常工作。我無法找到我看到的地方。
目前,我與選項1堅持,但我真的想知道最合適的方式來做到這一點。
你爲什麼不立即克隆所有的分支? – Chronial 2013-03-13 22:31:35
,因爲回購超過5GB的大小,並且至少有一百個分支。 – Andrey 2013-03-13 23:05:51