Подтвердить что ты не робот

Git -SVN с несколькими веткими?

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

  • ветки /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/
4b9b3361

Ответ 1

В соответствии с ответом на другой вопрос, лучше всего использовать 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" ​​ing, когда добавлена ​​новая ветвь пользователя.

Ответ 2

Вы можете добавить несколько записей ветвей и тегов в конфигурацию 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 Repo, а справа - путь, который будет отображаться в списке удаленных веток git. Вы можете использовать refs/remotes/* несколько раз, чтобы все отображалось как удаленная ветвь верхнего уровня, но следите за конфликтами имен - они будут разбивать вещи (следовательно svn-summer-students вместо summer-students, которые уже существуют).

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

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

Ответ 3

Для тех, кто хочет сделать это ретроактивно, git -svn manpage для 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/*