我们公司的subversion repo有点棘手:我们有一个基本的"默认"布局,包括主干,标签和分支.但是,在分支内部,我们有一个"工作"目录,其中包含更多分支.像这样的东西:
现在我如何让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.x的git-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中.