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

Missing branches cloning a non-standard svn repository using git-svn clone

我是一个完整的 git 新手,我想使用 git-svn 克隆我的 svn 存储库。但是clone命令后分支不见了运行.

回购布局如下:

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/*/*(并同时使用两者)并再次 运行ning clone 命令以查看是否任何额外的分支都会被拾取,但它们不会。

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

如果我 运行 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-Svn or how to use nested branches through git-svn 的副本。

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

These are optional command-line options for init. Each of these flags can point to a relative repository path (--tags=project/tags) or a full url (--tags=https://foo.org/project/tags). You can specify more than one --tags and/or --branches options, in case your Subversion repository places tags or branches under multiple paths. The option --stdlayout is a shorthand way of setting trunk,tags,branches as the relative paths, which is the Subversion default. If any of the other options are given as well, they take precedence.

对于你的情况,尝试:

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

...等等

可以再次 运行 克隆还是我必须从头开始并删除 git 存储库?

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

事实上,无需重新克隆整个存储库就可以做到这一点,这对于大型 Subversion 存储库来说可能需要花费很多时间。我通过编辑 .git 目录中的 config 文件来正确设置我的分支和标签。

如果你做一个普​​通的git svn fetch,什么都不会发生。诀窍是 trick/force Git 重新获取所有修订:

git svn fetch 0:HEAD

此命令会导致所有 tags/branches 被引入,而无需经过冗长乏味的 t运行k 导入,跳过 t运行 就足够聪明了k 个修订已在初始 运行 中导入。现在我的 SVN tags/branches 在我现有的 Git 存储库中,没有新的克隆。