Git-SVN有多个分支机构?

Dav*_*ogt 23 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/
Run Code Online (Sandbox Code Playgroud)

rco*_*oup 29

您可以在git-svn配置中添加多个分支和标签条目,甚至可以追溯.因此,如果SVN分支通常存在branches/*于您的SVN仓库中(即标准布局),但您也有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/*
Run Code Online (Sandbox Code Playgroud)

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

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

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


jos*_*hwa 13

对于那些希望追溯性地执行此操作的人,1.7.xgit-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/*
Run Code Online (Sandbox Code Playgroud)


jam*_*san 10

根据另一个问题的答案,最好的办法是使用Git 1.6.x并利用"深度克隆".

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

git svn clone -s --prefix=svn/ -b branches -b branches/work/dave -b branches/work/tom ...
Run Code Online (Sandbox Code Playgroud)

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

  • 这会使你的.git/config文件看起来像什么,因为我正在使用git 1.7并且想要追溯这样做? (4认同)
  • 我试过这个,但它也有一个名为“工作”的分支。有没有办法让它“工作”不是它自己的分支,而是“工作/something_else”?可能与--ignore-paths? (2认同)