Git workflow для разных версий фреймворка - PullRequest
6 голосов
/ 26 января 2012

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

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

ветви фреймворка

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

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

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

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

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

  • master
  • appA
  • appB
  • appC

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

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

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

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

1 Ответ

0 голосов
/ 27 января 2012

Как объясняется в « Git & Working для нескольких ветвей », два практических решения при применении фиксаций к нескольким веткам (что вы и сделали бы с опцией «функциональных веток»):

  • слияния (что должно позволить вам повторно использовать эту ветвь функций, так как она будет отслеживать то, что уже было слито в конкретную ветку): rebase --interactive может быть для вас, чтобы повторноупорядочите коммиты, поместив сначала те, которые вы хотите объединить, а затем те, которые вы еще не готовы объединить.
  • cherry-picking (и теперь поддерживает диапазонкоммитов ), но я всегда опасался сбора вишни .
...