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/*