2

我有一个SVN-repository,我想将它转换成一个git-repository。我正在使用svn2git来实现这一点。不幸的是,该工具似乎无法正确获取标签。我的SVN-repository 看起来像这样:

.../branches
.../tags
        project-version-5.2.5/
        project-version-5.3.0/
        project-version-5.3.1/
        project-version-5.4.0/
        project-version-5.5.0/
        project-version-5.5.1/
        project-version-5.5.2/
        project-version-5.5.3/
        project-version-5.5.4/
        project-version-5.6.0/
        project-version-5.6.1/
        project-version-5.6.2/
        project-version-5.6.3/
        project-version-5.6.4/
        project-version-5.6.5/
        project-version-5.6.6/
        project-version-6.0.0/
        project-version-6.0.1/
        project-version-6.0.2/
        project-version-6.1.0/
        project-version-6.1.1/
        project-version-6.1.2/
        project-version-6.2.0/
        project-version-6.2.1/
.../trunk

但是 git 存储库并不代表这一点。标签如下所示:

bash:~$ git tag
project-version-5.2.5
project-version-5.3.0
project-version-5.3.1
project-version-5.3.1@3812 <-- I have no idea, where that is coming from...
project-version-5.4.0
project-version-5.5.0
project-version-5.5.1
project-version-5.5.2
project-version-5.5.3
project-version-5.5.4
project-version-5.6.0
project-version-5.6.1
project-version-5.6.2
project-version-5.6.3
project-version-5.6.4
project-version-5.6.5

注意缺少的标签。由于某种原因,它们被存储为远程分支:

bash:~$ git branch -r
  svn/tags/project-version-5.6.5@4990 <-- Yay, random numbers!
  svn/tags/project-version-5.6.6
  svn/tags/project-version-5.6.6@5620 <-- And another one. 
  svn/tags/project-version-6.0.0
  svn/tags/project-version-6.0.1
  svn/tags/project-version-6.0.2
  svn/tags/project-version-6.1.0
  svn/tags/project-version-6.1.1
  svn/tags/project-version-6.1.2
  svn/tags/project-version-6.2.0
  svn/tags/project-version-6.2.1
  svn/trunk

这里发生了什么?

编辑:我忘了添加我的命令:svn2git http://path/to/repository --no-minimize-url --verbose --username='username' --trunk trunk --nobranches --tags tags

Edit2:我刚刚检查并发现,看似随机的数字实际上是SVN-repository 中的修订版,标签是由它制作的。有点奇怪,大约 20 个标签中只有 3 个会添加修订版......

Edit3:显然问题与一个标签的注释有关,其中包含". 之后的所有标签都保存为分支,因为svn2git不会转义"并尝试执行类似的操作

git tag -a -m "blablabla "blablabla"." "project-version-5.6.5@4990" "svn/tags/project-version-5.6.5@4990"

由于明显的原因而失败。我仍然不知道,为什么对于某些标签它会添加修订号。如果有人对如何克服这个问题有任何建议,我将非常感激。

Edit4:我找到了逃避问题的解决方案。-source中的转义函数svn2git有点奇怪......它只''\''. 我受够了...

4

2 回答 2

1

我通过添加双引号转义解决了这个问题。由于已经建议进行此更改,因此github我没有为此发起另一个拉取请求。虽然对于下一个有同样问题的人,这是我所做的:

  1. locate migration.rb- 就我而言,这是在/var/lib/gems/1.9.1/gems/svn2git-2.2.2/lib/svn2git/migration.rb
  2. 找到escape_quotes()(目前在行中找到335-337)的定义
  3. 添加.gsub("\"", "\\\"")到正文

我希望,这会在某个时候帮助有同样问题的人:)

于 2013-11-22T13:01:57.817 回答
1

当我也想知道这些@nnn标签时,我发现了这个问题。因此,如果其他人正在寻找相同的内容,则在git svn 手册中进行了描述:

如果 git svn 被配置为获取分支(并且 --follow-branches 有效),它有时会为一个 SVN 分支创建多个 Git 分支,其中附加分支的名称格式为 branchname@nnn(nnn 是一个 SVN 修订号)。如果 git svn 在 SVN 分支中找不到第一次提交的父提交,则会创建这些额外的分支,以将分支连接到其他分支的历史记录。

于 2016-01-12T08:15:59.037 回答