Git-SVN с несколькими филиалами?

Репозиторий Subversion нашей компании немного сложен: у нас есть базовый макет "по умолчанию" со стволом, тегами и ветвями. Однако внутри ветвей у нас есть "рабочий" каталог, который содержит больше веток. Что-то вроде этого:

  • филиалы / release_1_0_x
  • филиалы / release_1_1_x
  • филиалы / работа / Дэйв / topic_one
  • филиалы / работа / Том / topic_two
  • филиалы / работа / something_else

Теперь, как я могу заставить git-svn распознавать все эти (и еще несколько) как отдельные ветви? Кажется git svn init принимает только одно местоположение филиала, как бы я ни вызывал его.

Редактировать: так я инициализировал репозиторий git:

git svn clone  -s --prefix=svn/ http://svn.company.com/product/

3 ответа

Решение

Согласно ответу на другой вопрос, вам лучше всего использовать Git 1.6.x и использовать "глубокое клонирование".

Если вы не можете обновить до 1.6.x, то при клонировании вы можете указать несколько веток.

git svn clone -s --prefix=svn/ -b branches -b branches/work/dave -b branches/work/tom ...

Вам просто нужно убедиться, что вы добавляете информацию для новых пользователей в ваш.git/config перед тем, как "git svn fetch" будет добавлен, когда будет добавлена ​​новая ветка пользователя.

Вы можете добавить несколько веток и тегов в вашу конфигурацию git-svn, даже задним числом. Так что если нормально ветки SVN живут в branches/* в вашем репозитории SVN (т.е. стандартная схема), но у вас также есть branches/summer-students/*Вы можете настроить его в .git/config как ниже:

[svn-remote "svn"]
    url = svn+ssh://svn.example.com
    fetch = trunk:refs/remotes/trunk
    branches = branches/*:refs/remotes/*
    tags = tags/*:refs/remotes/tags/*

    branches = branches/summer-students/*:refs/remotes/svn-summer-students/*

Слева от : это путь в репозитории SVN, а справа - путь, который будет отображаться в вашем списке удаленных веток git. Ты можешь использовать refs/remotes/* неоднократно, чтобы все выглядело как удаленная ветвь верхнего уровня, но следите за конфликтами имен - они сломают вещи (следовательно, svn-summer-students вместо summer-students, который уже существует).

После редактирования конфига необходимо удалить .git/svn/.metadata и беги git svn fetch обновить список ветвей и восстановить его. git branch -r Затем следует показать дополнительные ветви. Если вы получаете ошибки, обратите внимание на конфликты имен.

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

Для тех, кто хочет сделать это задним числом, man-страница git-svn для 1.7.x говорит:

Также можно извлечь подмножество ветвей или тегов, используя разделенный запятыми список имен в фигурных скобках. Например:

[svn-remote "huge-project"]
     url = http://server.org/svn
     fetch = trunk/src:refs/remotes/trunk
     branches = branches/{red,green}/src:refs/remotes/branches/*
     tags = tags/{1.0,2.0}/src:refs/remotes/tags/*
Другие вопросы по тегам