2011-11-29 247 views
2

基於下面的答案命中。我找到了解決方案。git-svn:如何爲SVN的子項目創建標籤/分支

  1. 克隆SVN:
    $ git svn clone http://foo.net/code/design --trunk=trunk/proj1 --tags=tags/forProj1 --branches=branches/forProj1 localProjName

  2. ,然後將該代碼可以通過簡單的命令來創建
    $ git svn tag -n -m "test tag" test_v1

注:這也可以通過黑客的.git/config來完成在本地git克隆中將其更改爲

[svn-remote "svn"] 
    url = http://foo.net/code/design 
    fetch = trunk/proj1:refs/remotes/trunk 
    tags = tags/forProj1/*:refs/remotes/tags/* 
    branches = branches/forProj1/*:refs/remotes/branches/* 


原始的問題
我的SVN服務器結構是這樣的:

 
http://foo.net/code/design/ 
          |-- trunk/ 
          |  |-- proj1 
          |  |-- proj2 
          |-- tags/ 
          |  |-- forProj1 
          |  |-- forProj2 
          |-- branches/ 
          |   |-- forProj1 

我簽出proj1:

$ git svn clone http://foo.net/code/design/trunk/proj1 proj1

和我想創建proj1一個標籤,並把http://foo.net/code/design/tags/forproj1

下這個標籤我想:

$ git svn tag -m "test tag for proj1" test_tag_1

我得到錯誤信息說我已經把「--destination」。但我不知道目標選項應該是什麼樣子?

任何人都可以給我一個提示我怎麼能創建一個標籤或分支基於上述情況?

謝謝。

回答

-1

看那值當你這樣做你會得到:

git config --get-all svn-remote.svn.tags 

一旦這些應該與你想要的標籤位置。

指定爲--destination

+0

我試過你的解決方案。該命令沒有輸出。所以我仍然不知道 - 目標選項應該是什麼。 –

0

首先,使用-n開關預演,這樣可以保證該命令功能是你想要做的東西。有了SVN,否則它可能是一團糟。

接下來,您的項目佈局不是標準,所以git不會知道project1標籤的位置。在一個標準的佈局,軀幹和標籤將是兄弟姐妹,在這種情況下,你也可以使用如下命令:

git svn tag "project1_v12" -m "Version 1.2" 

由於SVN標籤可以(即使沒有svn籤)在直接在服務器執行,我的方法這樣做將直接運行svn命令,就像這樣:

svn cp svn_url/trunk/proj1 svn_url/tags/forproj1/v1.2 

,然後正常git fetch將有「SVN」遠程命名空間下更新本地的Git標籤V1.2。

+2

我試過上面的命令'git svn tag「project1_v12」-m「Version 1.2」'。但是我得到了這些錯誤信息:**爲Subversion存儲庫定義了多個標籤路徑。 您必須指定要在哪裏創建帶有--destination參數的標記。** –

+0

這正是我所說的。如果你可以執行這個命令,你的svn repo的佈局被git所理解,那將很簡單。但是既然沒有發生,你應該使用上面提到的svn命令創建一個標籤。一旦你做了抓取,你的git就會熟悉它的存在。並不是說你不需要svn checkout來運行它,因爲你可以直接在服務器上執行它。 –

+0

@LakshmanPrasad是否意味着在這種情況下不能使用「git svn tag」命令? –