¿Dónde almacenar las diferencias entre el desarrollador y la twig de producción en git?

Tengo un proyecto que administro desde un repository git. Usamos la estrategia de bifurcación de progits (como se describe en la respuesta aceptada, aquí: estrategia de la sucursal de Git para pequeños equipos de desarrollo ) donde una twig es la twig de producción y otra twig es la twig de desarrollo / testings. Implementamos el código usando fabric.

Cuando estamos listos para hacer una nueva versión de producción con git, fusionamos la twig de desarrollo / testing en la twig de producción y luego implementamos la twig de producción usando fabric. El problema es que existen diferencias de código entre el desarrollo y la producción: algunos logos cambian, algunos hosts / cnetworkingenciales DB diferentes, ese tipo de cosas. He estado guardando un file .patch que contiene las diferencias y que el tejido aplica el parche cuando despliega el entorno de producción, pero esto no funciona tan bien. En particular, falla totalmente si parte del código alnetworkingedor del parche ha cambiado: el parche no se puede aplicar y mi implementación aborta.

Me he estado preguntando si no debería simplemente aplicar todos mis cambios a la twig de producción directamente. ¿Cuáles son los inconvenientes de esto?

Un caso de uso particular que me preocupa es si tenemos que hacer una revisión. Actualmente hacemos esto ramificándonos desde el entorno de producción, realizando cambios y luego fusionando esa twig nuevamente en el desarrollo y la producción. Si la twig de producción es diferente de la de desarrollo, ¿pueden esos cambios entrar en la twig de desarrollo cuando la revisión se fusiona en desarrollo?

Su pregunta básicamente se networkinguce a "¿cómo puedo hacer un cambio en una twig, y ​​luego hacer que ese cambio no se propague cuando me una con otra?". Esto es razonablemente simple. En este punto, supongo que su twig de producción es básicamente una serie de fusiones, ya sea desde la twig de desarrollo o desde una twig de revisión. Entonces, presumiblemente, hacer una git merge production desde su twig de desarrollo no hará ningún cambio. Dado eso, adelante y haga sus cambios a la twig de producción. Ahora cometerlos. Ahora revise la twig de desarrollo y ejecute git merge -s ours production . Esto básicamente significa "fusionarse de la producción, pero rechazar todos sus cambios". Esto creará el compromiso de fusión, pero no tocará realmente su twig de desarrollo.

Una vez que se realiza esta fusión, ahora puede fusionar su twig de producción en desarrollo (o más bien, fusionar twigs de revisión) sin preocupaciones, porque su compromiso de solo producción ya está "fusionado" en desarrollo (a pesar de que el código cambia en sí mismo rechazado). Por lo tanto, la fusión de las twigs de su revisión no generará el código de solo producción.

Una vez que haya hecho esto, la única vez que necesita retroceder y volver a aplicar este truco es si realiza más cambios solo de producción. Si realiza cambios en la twig de desarrollo que entran en conflicto con sus cambios solo de producción, al fusionar el desarrollo en producción, puede continuar y aceptar el lado de producción de los conflictos sin problemas.

También tengo esta request en la twig de desarrollo y la twig de producción. No creo que git merge -s ours ** sea una buena solución porque puede garantizar que la fusión posterior no se sobrescriba, y después de eso se generará una relación principal entre dev y producción. Debes usar git merge -s our ** cada vez y eso haría que el log graph sea realmente feo y sin sentido.

Así que recomiendo usar

git cherry-pick

. Eso asegura el contenido que desea extraer.