我有一个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
- 源中的转义函数有点奇怪......它只用'
替换单引号('\''
)。我做完了......
答案 0 :(得分:1)
我通过添加双引号转义修复了问题。由于github
已经建议进行此更改,因此我没有启动另一个请求。虽然对于下一个有同样问题的人来说,这就是我所做的:
locate migration.rb
- 就我而言,这是/var/lib/gems/1.9.1/gems/svn2git-2.2.2/lib/svn2git/migration.rb
escape_quotes()
的定义(目前在行335-337
中找到).gsub("\"", "\\\"")
添加到正文我希望,这可以帮助有同样问题的人:)
答案 1 :(得分:1)
当我也想知道那些@nnn
标签时,我发现了这个问题。因此,如果其他人正在寻找git svn manual中描述的相同内容:
如果git svn配置为获取分支(并且--follow-branches有效),它有时会为一个SVN分支创建多个Git分支,其中附加分支的名称为branchname @nnn(nnn为SVN修订号)。如果git svn无法在SVN分支中找到第一次提交的父提交,则将创建这些附加分支,以将分支连接到其他分支的历史记录。