ищу рабочий процесс git, который поддерживает вложенные ветки разработки - PullRequest
0 голосов
/ 11 февраля 2019

Вот моя проблема - у меня есть кодовая база, которую нужно развернуть в трех разных средах.90% кода является общим.Остальные 10% уникальны для каждой среды.Я хотел бы использовать рабочий процесс git-flow (master ,velop), но мне кажется, что мне нужен второй слой ветвей "Develop" (Develop_a, Develop_B, Develop_C), которые ветвятся от "Develop".Если бы я сделал это, я мог бы сделать общие изменения кода в «разработке», а затем периодически объединять изменения разработки в Develop_a, Develop_b и Develop_c.В то же время я могу работать над вопросами, относящимися к Develop_a, Develop_b и Develop_c в филиалах этих филиалов.

Использование этого подхода делает «основную» ветвь практически бессмысленной с точки зрения того, что она является местом для выпускаемого программного обеспечения.develop_a ,velop_b и develop_c - это ветви, которые содержат полный набор программного обеспечения, которое должно быть выпущено для каждой среды.Я пытаюсь выяснить, есть ли какой-то рабочий процесс или лучшая практика, которая поддерживает это.Я не думаю, что разные репозитории для a, b, c имеют смысл из-за большого количества общего кода.

Я думаю, что лучшим / долгосрочным решением было бы реорганизовать код таким образом, чтобы создавать интерфейсы и классы, поддерживающие уникальностьvelop_a, develop_b и develop_c, с версией (a, b, c).) Развертывание решается во время выполнения (существуют другие проблемы и осложняющие факторы, которые могут сделать это невозможным).Я полагаю, что у меня есть возможность исследовать этот подход в долгосрочной перспективе, но у меня также есть краткосрочная потребность в создании рабочего процесса, чтобы люди могли начать работать над этими версиями, чтобы мы могли вывести их в поле для тестирования вближайшее будущее.

Любые мысли будут наиболее ценными.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Я не уверен, что вам вообще нужно что-то делать, кроме использования подхода git-flow.

После прочтения вашего поста у меня сложилось впечатление, что у вас есть некоторый основной код и платформа-специфический код, и они смешаны вместе (поскольку вы упоминаете рефакторинг для их разделения).

У меня также складывается впечатление, что специфичные для платформы биты кода ортогональны друг другу, то есть код, специфичный дляплатформа A не будет влиять на платформу B и т. д.

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

Если мое понимание правильное, подумайте о том, чтобы просто поддерживать один репозиторий, но настроить три разные цели {платформа-А, платформа-В, платформа-С}в вашей системе сборки.Это должно позволить вашим разработчикам сотрудничать друг с другом при внесении изменений в ядро, и позволит вам автоматически тестировать код на всех платформах при возникновении любого коммита.

Позже, если вы проведете рефакторинг кода до точки, где вы сможете отделитьИз специального кода A / B / C может иметь смысл создавать субмодули.Но я до сих пор не понимаю, почему.Гораздо проще IMO просто создавать подкаталоги и поддерживать традицию совместной работы всех.

0 голосов
/ 11 февраля 2019

Ваша проблема - идеальное место для использования подмодуля .

  • Создайте репозиторий для общего кода на 90%.
  • Создайте еще 3 репозитория дляиндивидуальный код.В каждом из них вы делаете git submodule add [url to common repo].
  • Теперь вставьте каждый фрагмент кода в соответствующий репозиторий.Это потребует некоторого рефакторинга.
  • С этого момента не трогайте общий код в «отдельных» репозиториях.
  • После изменений в базе общего кода вы переходите к общему репо.Затем в отдельных вы обновляете на git submodule update.
  • При клонировании репо, содержащего подмодуль, вы
    • клонируете репо (содержит пустую папку подмодуля),
    • git submodule init,
    • git submodule update.

Затем вы развернете отдельные репозитории.Теперь они содержат общий код, а также индивидуальный отдых в работающем меланже.И, конечно, вы можете использовать любую схему ветвления, какую захотите.

...