#git #svn #gerrit
#git #svn #gerrit
Вопрос:
В настоящее время на работе мы используем Subversion для SCM. Я настроил локальное зеркало git-svn и использую его в качестве основного рабочего пространства разработки. Теперь я доволен базовой функциональностью. Еще один разработчик в команде также хочет перейти на Git, поэтому мы рассматриваем возможность использования git-зеркала репозитория svn. Я также хотел бы попробовать Gerrit вместе с этим упражнением.
Настройка, которую я себе представляю, примерно такая:
-
Зеркало git для репозитория svn. Основная ветвь на этом синхронизирована с магистралью на svn.
-
Для каждой функции создается ветвь темы. Это связано с Gerrit, на котором происходит проверка. Как только набор изменений утвержден, Gerrit объединяет ветку темы обратно в master.
-
gitweb или аналогичное веб-приложение для просмотра репозитория в браузере.
-
Аналогичный процесс для других ветвей subversion, кроме магистрали.
По сути, я хочу, чтобы я взаимодействовал только с моим локальным git-клоном и веб-приложением Gerrit; возврат рассмотренных изменений обратно в svn должен происходить автоматически. Как мне настроить что-то подобное?
Комментарии:
1. Кто будет разбираться с конфликтами, возникающими при возврате изменений обратно в Subversion?
2. @Greg Hewgill Кхм, я предполагаю, что когда Gerrit попытается объединить изменения с главной веткой, это должно завершиться неудачей. 🙂
3. Хех, я пытаюсь сделать что-то подобное, хотя мне нужно только создать резервную копию моих ветвей git без необходимости преобразовывать их в ветви SVN. Очень смущен тем, что меня неоднократно спрашивали мой пароль для «git push», пока я не заметил, что забыл указать ssh:// в начале ссылки на сервер!
Ответ №1:
К сожалению, невозможно сделать все это автоматически (по крайней мере, не без большой работы). Вот несколько шагов, которые помогут вам приблизиться:
- Настройте свой git-клон на сервере Gerrit
- Создайте перехват svn или периодическую задачу, которая будет извлекаться из svn и передаваться вашему git-клону
- У Gerrit есть встроенная версия gitweb, так что вы в курсе
- На сервере Gerrit создайте перехват слияния изменений, который будет отправлен обратно в svn
Как упоминал Грег выше, при сбое шага 4 все будет сложно. Вам нужно будет сбросить репозиторий git в Gerrit, чтобы он соответствовал svn, и повторно отправить изменения. Это будет намного проще, если / когда вы убедите остальную часть своей команды отказаться от svn и использовать git / Gerrit 🙂
Удачи!
Ответ №2:
Можно настроить зеркало Git, которое будет синхронизировано с SVN репозитория
Установите SubGit в свой репозиторий SVN:
$ subgit install path/to/svn/repository
Затем просто настройте доступ к созданному связанному репозиторию Git (path/to/ svn/repository/.git), используя Apache или что-то еще. Каждый переход к этому репозиторию Git будет переведен в ревизию SVN и наоборот.
Таким образом, вы можете использовать связанный репозиторий Git в Gerrit и для вашей команды (как если бы SVN никогда не существовал). После этого вы можете закрыть репозиторий SVN (или продолжить использование). Чтобы остановить синхронизацию перед завершением работы, выполните:
$ subgit uninstall path/to/svn/repository