Я пытаюсь найти хорошее решение, используя git для гибкого управления большим проектом для разных платформ, клиентов, функций ...
В качестве простого примера (чтобы понять, что это за мойпроблема, но в действительности это будет более сложным) предположим, что у меня есть основная ветка, где я добавляю все общий источник.Из него я создаю ветки для разных операционных систем, таких как win (для Windows), gnu (для GNU) и т. Д., И ветки для любой функции, которая может потребоваться клиенту или нет (для простоты я называю их client_a и client_b).
* client_b
| * client_a
|/
| * gnu
|/
| * win
|/
* master
Таким образом, если один клиент требует приложения, работающего в Windows, с функциями, которые я сделал в ветви client_b, я мог бы создать ветку (winB) из ветви win как:
git checkout -b winB
git merge client_b
Эта новая ветка будет содержать все функции, включенные в client_b, и будет готова для создания приложения Win, по крайней мере, это мое намерение.Проблема заключается в том, что, если я хочу исправить ошибку или добавить больше кода в ветку client_b и хочу, чтобы winB и все другие ветви, в зависимости от client_b, получали и эти изменения, я должен идти по очереди, делая что-то вроде этого (это конкретный случай для winB)
git rebase client_b
git merge win
Обратите внимание, что это даже хуже, когда мне нужно добавить что-то новое в мастер, где все зависит от!Итак, мой вопрос, при таком сценарии, как бы вы справились с управлением этими ветками и легко обновляли результаты слияний (в нашем случае winB), не перебирая и не объединяя одну из этих ветвей снова?Предложения по другим лучшим сценариям для достижения этой цели также приветствуются.
Заранее спасибо!