2011-04-01 3 views
13

У меня есть репозиторий SVN с макетом, как
project1/магистральным
project1/ветви
project1/теги
project2/багажник
project2/ветви
project2/теги
т.д.Могу ли я Git-SVN клонировать SVN репо с несколькими стандартными раскладками каталога

по ряду причин, я хотел бы GIT-SVN репо, что позволяет мне работать на любой из этих проектов и выборки/dcommit от/до всех из них в один раз. Возможно ли это? Я знаю, что могу просто git-svn клонировать все это без указания ветвей, тегов и сундука, но тогда я потеряю много преимуществ использования git.

ответ

9

Вот как я это сделал. Однако могут быть более простые способы.

  1. Выберите первый проект с стандартной раскладкой вы хотели бы работать и git svn clone его:

    git svn clone --stdlayout http://sample.com/svn/repository-name/project-name repository-name

  2. Перейти в каталог repository-name и редактировать свой файл .git/config. Вы также можете сделать это с помощью команд git-config, но мне легче в текстовом редакторе.

  3. Вы увидите раздел [svn-remote "svn"], уже определенный для вашего первого проекта. Переименуйте svn-remote в нечто более уникальное, чем "svn", вероятно, такое же, как название вашего проекта. Например, [svn-remote "project-name"].

  4. Сделать более [svn-remote "project-name"] разделов для каждого проекта, следуя шаблону первого. Дайте каждому уникальное имя! Вам нужно будет изменить настройки fetch, branches и tags, чтобы использовать правильные имена каталога Subversion для каждого проекта.

  5. Как только вы закончите, сохраните файл и запустите git svn fetch --fetch-all. Другие проекты будут выбраны как удаленные в вашем локальном репозитории.

  6. Чтобы переключить master между проектами, сделайте git reset --hard other-project-name/trunk, так же, как если бы вы переключались на работу в любой другой удаленной ветке Subversion.

+0

Будет ли мерзавец СВН перебазироваться перезагрузить все проекты? Будет ли git svn dcommit совершать все изменения? –

+1

'git svn rebase' просто получает ваши исправления для вашего текущего HEAD, поэтому нет, все, что вы получаете, является текущей ветвью текущего проекта. То же самое для 'git svn dcommit'. Чтобы получить каждый проект, вам нужно выполнить 'git svn fetch -fetch-all', а затем перегрузить текущий HEAD. К сожалению, я не знаю об эквиваленте, чтобы зафиксировать все локальные ветви, которые опережают свои пульты, но я уверен, что это может быть сценарий. –

+2

Это то, что я искал. Чтобы упростить, на шаге 1 добавьте -R project1-name -prefix = project1-name/в команду git svn clone, чтобы исходный клон использовал правильное имя svn-remote и префикс ветки с самого начала. –

Смежные вопросы