2013-11-22 50 views
2

我有一个SVN -repository我想转换为git -repository。我使用svn2git来实现这一点。不幸的是,似乎这个工具在标签正确的时候遇到问题。我SVN -repository看起来是这样的:svn2git无法正确导入标签

.../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 
[email protected] <-- 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/[email protected] <-- Yay, random numbers! 
    svn/tags/project-version-5.6.6 
    svn/tags/[email protected] <-- 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"." "[email protected]" "svn/tags/[email protected]" 

其失败的原因很明显。我仍然不知道,为什么有些标签会添加版本号。如果任何人有任何建议如何克服这个问题,我会非常感谢。

Edit4:我找到了逃避问题的解决方案。 svn2git -source中的转义函数有点奇怪......它只用单引号(')替换'\''。我完成了...

回答

1

我通过添加双引号转义解决了这个问题。由于此更改已在github上建议,因此我没有为此启动另一个请求。虽然在接下来的一个同样的问题,这里是我做过什么:

  1. locate migration.rb - 在我的情况,这是在/var/lib/gems/1.9.1/gems/svn2git-2.2.2/lib/svn2git/migration.rb
  2. 找到escape_quotes()定义
  3. (目前在线路 335-337找到)
  4. 添加.gsub("\"", "\\\"")对身体

我希望,这将帮助别人同样的问题一段时间:)

+0

哪里是github线程?我有同样的问题,但我们现在已经很多年了。代码现在有点不同了,它包含'str.gsub(/'|“/){| c |”\\#{c}“}',但我不知道ruby是否足够了解我必须改变,你能帮助我吗? – lvthillo

1

我发现这个问题时,我也想知道那些@nnn标签。所以,如果有人在寻找同样的它在git svn manual描述:如果混帐SVN被配置为获取分支(和--follow支行有效)

,它有时会创建一个SVN多的Git分支分支,其中附加分支的名称为branchname @ nnn(其中nnn是SVN修订版号)。如果git svn无法在SVN分支中找到第一次提交的父提交,将分支连接到其他分支的历史记录,则会创建这些额外的分支。