Настройка Gerrit с помощью Git-зеркала репозитория Subversion

#git #svn #gerrit

#git #svn #gerrit

Вопрос:

В настоящее время на работе мы используем Subversion для SCM. Я настроил локальное зеркало git-svn и использую его в качестве основного рабочего пространства разработки. Теперь я доволен базовой функциональностью. Еще один разработчик в команде также хочет перейти на Git, поэтому мы рассматриваем возможность использования git-зеркала репозитория svn. Я также хотел бы попробовать Gerrit вместе с этим упражнением.

Настройка, которую я себе представляю, примерно такая:

  1. Зеркало git для репозитория svn. Основная ветвь на этом синхронизирована с магистралью на svn.

  2. Для каждой функции создается ветвь темы. Это связано с Gerrit, на котором происходит проверка. Как только набор изменений утвержден, Gerrit объединяет ветку темы обратно в master.

  3. gitweb или аналогичное веб-приложение для просмотра репозитория в браузере.

  4. Аналогичный процесс для других ветвей subversion, кроме магистрали.

По сути, я хочу, чтобы я взаимодействовал только с моим локальным git-клоном и веб-приложением Gerrit; возврат рассмотренных изменений обратно в svn должен происходить автоматически. Как мне настроить что-то подобное?

Комментарии:

1. Кто будет разбираться с конфликтами, возникающими при возврате изменений обратно в Subversion?

2. @Greg Hewgill Кхм, я предполагаю, что когда Gerrit попытается объединить изменения с главной веткой, это должно завершиться неудачей. 🙂

3. Хех, я пытаюсь сделать что-то подобное, хотя мне нужно только создать резервную копию моих ветвей git без необходимости преобразовывать их в ветви SVN. Очень смущен тем, что меня неоднократно спрашивали мой пароль для «git push», пока я не заметил, что забыл указать ssh:// в начале ссылки на сервер!

Ответ №1:

К сожалению, невозможно сделать все это автоматически (по крайней мере, не без большой работы). Вот несколько шагов, которые помогут вам приблизиться:

  1. Настройте свой git-клон на сервере Gerrit
  2. Создайте перехват svn или периодическую задачу, которая будет извлекаться из svn и передаваться вашему git-клону
  3. У Gerrit есть встроенная версия gitweb, так что вы в курсе
  4. На сервере 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