Как импортировать ответвления svn и теги в мерзавца-svn?

У меня есть центральный репозиторий 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 сделает это. Но это получит все изменения, который является чем-то, что я не хотел бы.

67
задан H. Pauwelyn 7 February 2019 в 07:54
поделиться

2 ответа

Если вы хотите видеть свои ветки при выполнении ветки 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
5
ответ дан 24 November 2019 в 14:36
поделиться

Вы говорите, что не получили свои ветки в кассе.

Скорее всего, это проблема с макетом вашего svn-репо.

Стандартный макет:

branches/

tags/

trunk/

Если у вас такой макет:

branches/user1/

branches/user2/

Тогда вы потеряете свои ветки, когда будете делать git svn fetch / clone.

Чтобы исправить это, вы должны указать аргумент

--branches=branches/*/* в git clone.

9
ответ дан 24 November 2019 в 14:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: