Как импортировать ветки svn, внедренные в разные каталоги, в git с помощью git -svn?

У меня есть структура хранилища SVN, как показано ниже. Мы используем несколько уровней под ветками для различных разделов поддержки выпуска, а также каталог для ветвей функций.

git -svn init, похоже, работает с одним аргументом --branches, т.е. кажется, что все ветки находятся в одном месте.

trunk
branches
  1.1
    1.2.1
    1.2.2
  1.2
    1.2.1
    1.2.2
    1.2.3
  features
    feature1
    feature2

Любые идеи о том, как с этим справиться?

Спасибо

Ответ 1

В вашем файле конфигурации установите для секции svn-remotes следующее:

[svn-remote "svn"]
    url = svn://svnserver/repo
    fetch = trunk:refs/remotes/trunk
    branches = branches/*/*:refs/remotes/*
    tags = tags/*:refs/remotes/tags/*

Это позволит вам захватить вложенные ветки.

Ответ 2

По соглашению, ветки Subversion все живут в одном "ветки" в репозитории Subversion, поэтому я не удивлен, что git-svn делает это предположение.

Я бы предложил следующее (обратите внимание, что вы можете потерять некоторую историю в этой операции):

  • Сгладить пути Subversion branches, используя соглашение об именах, чтобы сохранить уникальные идентификаторы и идею текущей структуры.
  • Выполнить git-svn
  • Переместите вещи в репозитории git, чтобы соответствовать вашим практикам.

Опасность losing history зависит от того, насколько хорошо git-svn выполняет операции копирования с разных путей. Я столкнулся с этой проблемой, недавно переместив репозитории subversion (1.4-ish).

Ответ 3

Возможно ли создать репозиторий git для каждого из подкаталогов ветвей?

Ответ 4

Вы можете добавить несколько пультов git svn для каждой из ветвей или, возможно, в каждую из каталогов ветвей. Первоначальный git svn fetch будет длиться вечно, но из того, что я понимаю, он должен работать.