Рабочий процесс Git для разных версий фреймворка

У нас есть следующая настройка: три приложения, которые похожи друг на друга, с общим кодом, извлеченным в фреймворк. Каждое приложение управляется в собственном репозитории git и включает фреймворк в виде подмодуля git.

Проблема в том, что приложения теперь разрабатываются параллельно с добавлением новых функций в структуру, которые другим приложениям не требуется поддерживать сразу. В настоящее время у нас есть разные ветки фреймворка для всех приложений. Одно приложение использует основную ветвь фреймворка, потому что в большинстве случаев новые функции были впервые представлены в этом приложении.

Фреймворк

  • master (используется приложением A)
  • appB
  • appC

Когда в appB вводится новая функция, требующая изменений в структуре, эти изменения были внесены в ветку appB. Если эти изменения впоследствии потребовались в приложении A, ветка appB была объединена с мастером.Это означает, что все изменения в appB нужно было объединить в master.

Эта система работала, но имела некоторые недостатки

  • объединение функции из одной ветки в другую означало, что мы должны были объединить все изменения
  • легко потерять отслеживание того, что уже было объединено или что будет объединено при объединении одна ветвь в другую
  • Отметка критических изменений была сделана с помощью сообщений фиксации, что сделало последний пункт еще более важным

В настоящее время мы ищем новый рабочий процесс. Я думал о наличии следующих веток

  • master
  • appA
  • appB
  • appC

Итак, для каждого приложения одна ветка и главная ветка, которая включает в себя все изменения. При разработке новых функций необходимо создать ветвь функций, а затем применить ее к основной, а также ко всем ветвям приложения, эта функция необходима сразу. Другие приложения могут объединить ветку функций, когда им понадобится эта функция позже.

Я вижу следующие проблемы с этим

  • Как я могу объединить ветку функции с несколькими ветвями и объединить только те изменения, которые произошли в ветке. Я знаю «git rebase на ...», но не совсем уверен, смогу ли я использовать эту команду несколько раз.
  • Следует ли использовать git cherry-pick для объединения функций в несколько веток? Я бы предпочел не делать этого, потому что я думаю, что это будет подвержено ошибкам, если не выбрать все изменения, которые были сделаны в ветке функции
  • Как отслеживать, какая функция (ветвь) была применена к какому приложению.Могу ли я использовать branch --no-merge, или это сработает только в том случае, если ветки имеют одного и того же предка?

Является ли мой намеченный способ лучшим способом добиться этого или мне следует полностью переосмыслить свою стратегию?

6
задан sliver 26 January 2012 в 12:42
поделиться