svn2git无法正确导入标签

时间:2013-11-22 09:04:19

标签: git svn svn2git

我有一个SVN - 存储库,我想将其转换为git - 存储库。我正在使用svn2git来实现这一目标。不幸的是,似乎该工具在获取正确的标签时遇到了问题。我的SVN - 存储库看起来像这样:

.../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 - 存储库中的修订版,标记符来源于此。有点奇怪,大约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:我找到了逃避问题的解决方案。 svn2git - 源中的转义函数有点奇怪......它只用'替换单引号('\'')。我做完了......

2 个答案:

答案 0 :(得分: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("\"", "\\\"")添加到正文
  4. 我希望,这可以帮助有同样问题的人:)

答案 1 :(得分:1)

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

  

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