Фон
У нас есть игра, работающая в трех разных регионах, так что это три разные версии веток релиза, которые извлекаются из одной главной ветки, скажем, branch_jp, branch_us, branch_tw (назовем их ветвями релиза) и мастера.
Обычно новые функции разрабатываются в основной ветке и объединяются в ветки выпуска. Но не все функции необходимы для каждой ветки выпуска - это определяется некоторыми операционными потребностями и т. Д. - поэтому требуется объединение с ними изменений основной ветки.
Проблема
Мы использовали Subversion для контроля версий, недавно мы решили перейти на Git.
Проблема заключается в том, что мы сделали в subversion, когда слияние кода заключалось в том, чтобы выбрать коммиты из master, необходимые для этой ветви, и объединить их, как показано ниже:
- commitA1
- commitA2
- commitB1
- commitB2
- commitA3
Если branch_jp нужна функция FeatureA, мы выбираем commitA & B и объединяем их в branch_jp, если branch_us просто нужна функция B, мы просто выбираем commitB.
Поскольку мы перешли на Git, предположим, что все функции разрабатываются в ветвях компонентов из master и объединяются в ветви релизов. Проблема в том, что мы не можем так поступить:
master → featurebranch → master → branch_jp/tw/us
или
master → featurebranch → branch_jp/tw/us
↓
master
, поскольку ветвь функции извлекается из главного устройства, поэтому прежние функции, которые не были объединены в ветви выпуска, будут объединены таким образом.
Я знаю, что команда 'cherry-pick' может сделать то же самое, но мне интересно, есть ли еще какие-нибудь 'Git-y' способы справиться с ситуацией?
Кроме того, есть ли более распространенный / более приятный / элегантный рабочий процесс для обработки этой ситуации с кодами 'multi-release version'?