Git-SVN с несколькими филиалами? - PullRequest
21 голосов
/ 28 октября 2009

Репозиторий 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 ]

28 голосов
/ 26 мая 2011

Вы можете добавить несколько веток и тегов в вашу конфигурацию 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 docs есть еще несколько примеров указания путей с помощью подстановочных знаков или выражений, если у вас есть необычная компоновка SVN.

12 голосов
/ 24 мая 2011

Для тех, кто хочет сделать это задним числом, справочная страница 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/*
10 голосов
/ 28 октября 2009

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

...