У меня есть центральный репозиторий SVN, на который я должен согласиться, но у меня есть страсть к мерзавцу (как любой другой разработчик, которого я знаю). Случай известен.
Затем я читал о мерзавце-svn и дал ему попытку. Так как мне не нужна полная история, только приблизительно с двух месяцев, мне действительно нравилось это:
git svn clone -r 34000 -s https://svn.ourdomain.com/svn/repos/Project/SubProject
SubProject имел, как обычно, подкаталоги trunk
, tags
и branches
.Отлично.
Затем для получения последнего пересмотра я сделал
git svn rebase
Некоторые загрузки позже, большой. Последний пересмотр, журналы, и т.д. Хорошо, теперь я переключусь на свое ответвление функции.
$ git branch
* master
$ git branch -r
trunk
$ git branch -a
* master
remotes/trunk
Вопросы: Где мои ответвления? Я сделал что-то не так? Как я должен сделать для получения моих ответвлений в новом мерзавце repo?
мерзавец-svn, везде, где я читал об этом, имел дело мудро с ответвлениями и тегами, но поведение не то, что я ожидал.Спасибо!
Править: Я только что узнал это git svn fetch
сделает это. Но это получит все изменения, который является чем-то, что я не хотел бы.
Если вы хотите видеть свои ветки при выполнении ветки git после импорта из svn, вам следует использовать скрипт ruby svn2git (и git2svn)
Это лучше, чем git svn clone, потому что, если у вас есть этот код в svn:
trunk
...
branches
1.x
2.x
tags
1.0.0
1.0.1
1.0.2
1.1.0
2.0.0
git-svn
будет просматривать историю коммитов для создания нового репозитория git.
Он импортирует все ветки и теги как удаленные ветки SVN, тогда как на самом деле вам нужны локальные ветки git и объекты тегов git. Итак, после импорта этого проекта вы получите :
$ git branch
* master
$ git branch -a
* master
1.x
2.x
tags/1.0.0
tags/1.0.1
tags/1.0.2
tags/1.1.0
tags/2.0.0
trunk
$ git tag -l
[ empty ]
После того, как svn2git
будет завершен с вашим проектом, вместо этого вы получите следующее:
$ git branch
* master
1.x
2.x
$ git tag -l
1.0.0
1.0.1
1.0.2
1.1.0
2.0.0
Вы говорите, что не получили свои ветки в кассе.
Скорее всего, это проблема с макетом вашего svn-репо.
Стандартный макет:
branches/
tags/
trunk/
Если у вас такой макет:
branches/user1/
branches/user2/
Тогда вы потеряете свои ветки, когда будете делать git svn fetch / clone.
Чтобы исправить это, вы должны указать аргумент
--branches=branches/*/*
в git clone.