У меня есть 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
-репозитории, из которого были сделаны теги. Довольно странно, что только 3 из ~20 тегов добавляют к ним ревизию...
Edit3: Очевидно, проблема связана с комментарием одного тега, который содержит "
. Все теги после этого сохраняются как ветки, потому что svn2git
не экранирует "
и пытается сделать что-то вроде
git tag -a -m "blablabla "blablabla"." "project-version-5.6.5@4990" "svn/tags/project-version-5.6.5@4990"
который не работает по понятным причинам. Я до сих пор понятия не имею, почему для некоторых тегов добавляется номер ревизии. Если у кого-то есть какие-либо предложения, как преодолеть эту проблему, я был бы очень благодарен.
Edit4: я нашел решение проблемы побега. Эскейп-функция в svn2git
-источнике какая-то странная... Она только заменяет одинарные кавычки ('
) на '\''
. Я задолбался...