Git-SVN有多个分支机构?

时间:2009-10-28 16:41:13

标签: git git-svn

我们公司的subversion repo有点棘手:我们有一个基本的“默认”布局,包括主干,标签和分支。但是,在分支内部,我们有一个“工作”目录,其中包含更多分支。像这样:

  • 分支机构/ release_1_0_x
  • 分支机构/ release_1_1_x
  • 分支机构/工作/戴夫/ topic_one
  • 分支机构/工作/汤姆/ topic_two
  • 分支机构/工作/ something_else

现在我如何让git-svn将所有这些(以及更多)识别为单独的分支?看起来git svn init只接受一个分支位置,我怎么调用它。

编辑:这是我初始化git repo的方式:

git svn clone  -s --prefix=svn/ http://svn.company.com/product/

3 个答案:

答案 0 :(得分:28)

您可以在git-svn配置中添加多个分支和标签条目,甚至可以追溯。因此,如果SVN分支中的SVN分支通常位于branches/*中(即标准布局),但您也有branches/summer-students/*,则可以在.git/config中进行设置,如下所示:

[svn-remote "svn"]
    url = svn+ssh://svn.example.com
    fetch = trunk:refs/remotes/trunk
    branches = branches/*:refs/remotes/*
    tags = tags/*:refs/remotes/tags/*

    branches = branches/summer-students/*:refs/remotes/svn-summer-students/*

:左侧是SVN Repo中的路径,右侧是在git远程分支列表中显示的路径。您可以反复使用refs/remotes/*将所有内容显示为顶级远程分支,但要注意名称冲突 - 它们会破坏事物(因此svn-summer-students而不是summer-students已经存在)。

编辑配置后,您需要删除.git/svn/.metadata并运行git svn fetch以刷新分支列表并重新生成它。然后git branch -r应显示额外的分支。如果出现错误,请注意命名冲突。

如果你有一个时髦的SVN布局,git svn docs还有一些通过通配符或表达式指定路径的例子。

答案 1 :(得分:12)

对于那些希望追溯执行此操作的人,git-svn manpage for 1.7.x说:

  

也可以获取子集   分支或标签使用   以逗号分隔的名称列表   括号。例如:

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

答案 2 :(得分:10)

根据another question的答案,您最好的选择是使用Git 1.6.x并利用“深度克隆”。

如果无法升级到1.6.x,则可以在克隆时指定多个分支。

git svn clone -s --prefix=svn/ -b branches -b branches/work/dave -b branches/work/tom ...

在添加新用户分支时,您必须确保在“git svn fetch”之前将新用户的信息添加到.git / config。