代码之家  ›  专栏  ›  技术社区  ›  Dave Vogt

具有多个分支位置的Git SVN?

  •  21
  • Dave Vogt  · 技术社区  · 15 年前

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

    • 分支/释放
    • 分支/释放
    • 分支/工作/戴夫/主题\一
    • 分支机构/工作/汤姆/主题二
    • 分支/工作/其他

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

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

    git svn clone  -s --prefix=svn/ http://svn.company.com/product/
    
    3 回复  |  直到 13 年前
        1
  •  10
  •   Community Reversed Engineer    7 年前

    根据答案 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/config中。

        2
  •  28
  •   Tom Lianza    13 年前

    您可以在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/*
    

    : 是svn repo中的路径,右边是它将显示在Git远程分支列表中的路径。你可以使用 refs/remotes/* 重复地让所有的东西都显示为一个顶级的远程分支,但是要注意名称冲突——它们会破坏东西(因此 svn-summer-students 而不是 summer-students ,已存在)。

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

    这个 git svn docs 如果您有一个时髦的SVN布局,那么可以使用通配符或表达式来指定路径。

        3
  •  12
  •   joshwa    13 年前

    对于那些想要追溯的人来说, 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/*