缺少使用git-svn clone克隆非标准svn存储库的分支

时间:2015-10-21 11:25:21

标签: git svn git-svn git-clone

我是一个完整的git新手,我想使用git-svn克隆我的svn存储库。但是,运行克隆命令后,分支将丢失。

回购布局如下:

trunk/
branches/team/releases/release-1
branches/team/releases/release-2
...
branches/development/user1/feature1
branches/development/user1/feature2
branches/development/user2/feature3
branches/development/user2/feature4
...
tags/release1
tags/release2

我使用的命令是:

git svn clone --trunk=/trunk --branches=branches/*/* --tags=tags/*/* --prefix=svn/ --authors-file=authors.txt <my-repo> <git-repo-name>

我尝试将分支选项修改为/branches/development/user1/*/branches/development/user1/*/*(并同时使用两者)并再次运行clone命令以查看是否选择了任何其他分支起来但他们不是。

可以再次运行clone还是我必须从头开始删除git repo?

我能看到克隆后运行git branch -r的所有内容是:

svn/development/user1
svn/development/user1
svn/team/releases
svn/trunk
note that all the tags are present but omitted for brevity

如何获得遗失的分支?

这不是Cloning a Non-Standard Svn Repository with Git-Svnhow to use nested branches through git-svn的副本。

2 个答案:

答案 0 :(得分:1)

实际上可以在不重新克隆整个存储库的情况下执行此操作,这可能需要花费数小时才能完成大型subversion存储库。我这样做是通过编辑config目录中的.git文件来正确设置分支和标签。

如果你做一个简单的git svn fetch,什么都不会发生。诀窍是欺骗/强制Git重新获取所有修订版本:

git svn fetch 0:HEAD

此命令会导致所有标记/分支无需经过漫长而繁琐的主干导入,它足够聪明,可以跳过已在初始运行中导入的主干修订版。我现在在我现有的Git存储库中有我的SVN标签/分支,没有新的克隆。

答案 1 :(得分:0)

您可以多次指定--branches标记。 From the docs

  

这些是init的可选命令行选项。这些标志中的每一个都可以指向相对存储库路径(--tags = project / tags)或完整URL(--tags = https://foo.org/project/tags)。如果您的Subversion存储库在多个路径下放置标记或分支,您可以指定多个--tags和/或--branches选项。选项--stdlayout是将trunk,tags,branches设置为相对路径的简便方法,这是Subversion的默认设置。如果同时给出任何其他选项,则它们优先。

在您的情况下,请尝试:

git svn clone \
  --branches=branches/team/releases/* \
  --branches=branches/development/user1/* \
  --branches=branches/development/user2/* \

...等

再次运行克隆是否可以,或者我必须从头开始删除git repo?

一般来说,你应该从头开始尝试。该工具并不是一个更新脚本。