2011-11-29 141 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”命令? –