Рабочий процесс Git с несколькими стабильными ветвями, синхронизация с svn

Наш проект был преобразован от svn к git. Разработчики сейчас используют git-svn, но хотели бы перейти к использованию большей мощности под капотом. Список желаний:

  • мощное ветвление, например, тематические / функциональные ветки
  • изоляция основной и промежуточной работы над релизами, иногда несколько параллельных.
  • компактная, средняя и стабильная установка Jenkins-CI - минимальное обслуживание (по сравнению с изменением конфигурации задания после каждого выпуска)
  • короткие итерации, команда разработчиков выпускает QA каждые 2 недели; не обязательно снаружи
  • несколько продуктов (P1..P3), созданных из одних и тех же источников, выпущенных независимо; с переменным давлением
  • иметь больше случайных пользователей, не связанных с git, в "большой команде" ... они S&U :) .. но мы должны предоставить им svn доступ как минимум к 1 ветке (транку). Их вклад ограничен несколькими каталогами, поэтому здесь нет большого риска конфликта.

Сработает ли следующая стратегия?

  1. develop: основная ветка, в которой происходит разработка, a'la git-flow
  2. стабильные продуктовые отрасли: product1 .. product3. Один или несколько из них будут объединены с основной линией после выпуска разработчика. Похоже на «начало выпуска 1.4.3» в git flow, но это будут постоянные ответвления. Релизы будут помечены здесь, а затем объединены для разработки. На данный момент было бы стабильно, как master в git-flow, всего несколько из них.
  3. прекратить использовать git-svn напрямую - вместо этого подталкивать / тянуть к зеркалу. При необходимости также можно использовать ветки функций.
  4. объединить svn / trunk -> разработать. Svn будет получать случайные и отдельные проверки; поэтому планируем автоматизировать его с помощью задания Jenkins, уведомляя людей, если он не удался, чтобы его можно было объединить вручную
  5. merge develop-> svn / trunk: регулярно (например, ежедневно) в пакетном режиме. Это, наверное, самая шаткая часть (по крайней мере, для новичков). Планирование чего-то вроде перебазирования или какого-нибудь волшебного средства сброса
  6. Настройка CI будет простой, например, тестирование и разработка строятся вне основной ветки, официальный продукт строится из своих собственных веток продукта.

Git-Flow заманчиво - в основном потому, что он хорошо описан и автоматизирован. . Но это не кажется идеальным вариантом для моего случая; в основном из-за потенциально параллельных выпусков, нескольких линеек продуктов и CI аспекты.

Будем очень признательны за любые информированные мнения.


person inger    schedule 05.03.2012    source источник


Ответы (1)


Что ж, после того, как вы конвертируете в git, было бы довольно сложно настроить несколько веток для SVN. Я бы сказал, что эти «пользователи» должны научиться или уйти. Если вам нужны функции git для лучшего управления ветвями, это правильное решение независимо от S&U.

Что касается управления несколькими производственными выпусками, я предлагаю вам модель, которую я придумал для Net-SNMP это работает очень хорошо. У нас есть несколько веток производственных версий, которые поддерживаются в течение нескольких лет, и поэтому отслеживание исправлений всегда было проблемой в SVN. В рамках нашего нового рабочего процесса мы намного счастливее и в целом имеем достаточно хорошие ощущения, что мы не бросали патчи в ту или иную ветку из-за реального слияния (в отличие от SVN, где нам приходилось вручную проверять, чтобы каждая ветка содержала каждый патч).

person Wes Hardaker    schedule 05.03.2012
comment
И снова о svn- ›git syncing (пункт 4): звучит просто: простое слияние. Другой способ (# 5) менее важен - необходимо сделать историю линейной. По сути, это то же самое, что и git-svn (где я также выполнял сложное слияние) только на уровне команды. Главное, ИМХО, делать это регулярно и последовательно. Какой боли вы ожидаете - кроме политики? (даже если я согласен с тем, что люди должны быть счастливы учиться, они могут возразить, что на это сейчас нет времени, и я бы предпочел постепенное развертывание в любом случае, а не вмешиваться в политику). - person inger; 06.03.2012
comment
Спасибо за то, что поделились своим рабочим процессом, каскадные ветки выпуска и водопадные слияния интересны, даже если не применимы к моему контексту. В вашем случае ветки выпуска кажутся для целей обслуживания, в моем они больше для параллельного развертывания / укрепления + для обеспечения чистой, ориентированной на продукт истории. - person inger; 06.03.2012
comment
Если ваши ветви действительно параллельны, подумайте о том, чтобы использовать как можно больше функциональных веток и иметь список того, какие функции должны быть включены в какие ветки продукта и т. Д. - person Wes Hardaker; 06.03.2012
comment
По сути, они получат все функции в какой-то момент, просто в - потенциально - ином цикле .. Например. когда развертывается P1-V1.4 (фаза стабилизации), мы хотим защитить ветвь P1 от работы, связанной с P3-V1.7 или общими наработками, однако это позволит получить их как можно скорее (например, следующая итерация). Кстати, архитектура программного обеспечения является модульной (OSGi), поэтому наличие единого источника не означает, что все сборки продуктов будут включать все функции ... но источник включает. - person inger; 06.03.2012