¿Cómo puedo volver a establecer fácilmente todas las twigs dependientes si cambio una de las twigs de las que dependen?

Estoy tratando de encontrar una buena solución usando git para gestionar un gran proyecto de forma flexible para diferentes plataforms, clientes, características …

Como un simple ejemplo (para entender cuál es mi problema, pero en realidad será más complejo) supongamos que tengo mi twig principal si añado toda la fuente común. Desde allí, creo twigs para diferentes sistemas operativos, como win (para Windows), gnu (para GNU), etc. y twigs para cualquier característica que un cliente pueda solicitar o no (para facilitarlo, los llamo client_a y client_b).

* client_b | * client_a |/ | * gnu |/ | * win |/ * master 

De esta forma, si un cliente solicita una aplicación que se ejecute en Windows con las funciones que hice en la twig client_b, podría crear una twig (winB) desde la twig 'win' como:

 git checkout -b winB git merge client_b 

Esta nueva twig contendrá todas las características incluidas en client_b y estará list para generar una aplicación Win, al less esta es mi intención. El problema es que de esta manera, si quiero arreglar un error o agregar más código en la twig client_b y quiero que winB y todas las otras twigs que dependen de client_b también tengan estos cambios, tengo que ir uno por uno haciendo algo como esto ( este es el caso concreto para winB)

 git rebase client_b git merge win 

Tenga en count que esto es incluso peor cuando tengo que agregar algo nuevo en el master, ¡de lo que depende todo! Entonces, mi pregunta es, teniendo este escenario, ¿cómo harías para administrar estas sucursales y actualizar fácilmente los resultados de las fusiones (winB en nuestro caso) sin ir una a una de estas sucursales reestableciendo y fusionando nuevamente? Las propuestas para otros mejores escenarios para lograr esto también son bienvenidas.

¡Gracias por adelantado!

Tienes algunas opciones.

En primer lugar, si las twigs del código del cliente se usan en otro lugar (alguien más está codificando en su contra), entonces no debería usar rebase. rebase reescribe la historia, incluidos los SHA1 y puede causar mucho dolor si otras personas confían en el historial.

La primera opción es crear parches de la característica y aplicarla en las twigs donde desea que aparezca la function.

El segundo es elegir los commits en las twigs donde los quieres.

El tercero es simplemente fusionar los cambios en, aunque esto no funcionará si algunas de sus twigs divergieron de la maestra para habilitar una característica local (por ejemplo, para Windows).

Optaría por un parche o una selección de cereza y escribir un script para permitir que este process se automatice para la twig específica o grupos de sucursales.

P.ej:

apply_patches_for_win windows-feature.patch

o

cherry_pick_for_win commit_SHA1

También podría escribir una secuencia de commands para volver a establecer la base de las twigs, si la rebase sigue siendo la mejor opción.