Flujo de trabajo de git recomendado para las instancias de testing y producción

Aunque he estado usando git por un time, todavía me considero un n00b, así que por favor no seas tan duro conmigo.

Estoy manteniendo un sistema mainframe "corporativo" como dos copys no idénticas. Llamémoslos Prueba y Producción. El mainframe no tiene nada que yo (o, probablemente, ninguno de ustedes) considere un sistema de control de versiones, entonces estoy usando git en el escritorio para proporcionarme el control de la versión. Estas son las principales características de mi flujo de trabajo actual:

  • El escritorio y el mainframe están "sincronizados" con FTP. Al final, todo el trabajo de desarrollo, ya sea escrito en el mainframe o en la PC, termina en la PC en una twig de git.

  • No tengo acceso a ningún tipo de tecnología de implementación "moderna" como Hudson

  • Tengo dos twigs principales, llamadas Test y Prod. Debido a la estructura (henetworkingada) del producto, existen varias diferencias en el código entre las instancias Test y Prod. Por ejemplo, todos los paneles de visualización necesitan identificar claramente si se trata de Test o Prod, pero no hay forma de configurar esto en un solo punto.

  • Generalmente creo otras twigs ad-hoc para subproyectos de desarrollo específicos.

  • El desarrollo general se realiza en la twig Prueba, con varias confirmaciones. Cuando esté listo, estos se recogen en Prod, se labeln con un número de cambio y se cargan cuando se atestingn.

  • El trabajo de emergencia, afortunadamente raro, se realiza en la twig de Prod y se selecciona en Test.

  • La recolección de cerezas, muy ocasionalmente, requiere una fusión manual.

Me gustaría mejorar este flujo de trabajo. Actualmente mi repository está lleno de cambios paralelos idénticos en las dos twigs.

Creo que preferiría hacerlo de esta manera (para Test -> Prod):

  • Una vez que el desarrollo esté listo, crea una nueva twig en HEAD of Prod

  • Contraer este set de cambios de desarrollo en un solo cambio en la nueva twig

  • Fusiona esta nueva twig en Prod. Tenga en count que su ancestro común es anterior a los cambios que hacen que Test sea diferente de Prod

Parece que git rebase -i podría hacer el trabajo, pero debo confesar que git rebase es mi git rebase asinorum , y de alguna manera he logrado arruinar mi tree varias veces.

Entonces mis preguntas son estas:

  1. Por favor sugiera una mejor manera, dentro de las limitaciones del producto.

  2. Si mi enfoque preferido es viable, ¿podría alguien sugerir los parameters correctos para git rebase -i ?

En cuanto a las diferencias entre Test y Prod, compruebe si puede detectar si se encuentra en un entorno u otro.

Eso permitiría, para los files con un contenido específico de la plataforma, ser modificado en la salida con un controller de filter a través de un script de borrón.

controlador de filtro

De esta forma, no tendrías que mantener twigs solo para separar sets de códigos casi idénticos.

Mi recomendación es fusionar sus twigs de desarrollo (Prueba) y producción (Prod) entre sí con más frecuencia en lugar de cambios selectivos. En particular, cuando se realicen cambios en Prod, combínelos frecuentemente (al less una vez al día) en Test. Cuando los cambios en la Prueba estén listos, combínalos en Prod.

El hecho de que usted esté eligiendo inteligentemente las testings de Test into Prod luego de su aprobación también sugiere que sus confirmaciones no están bien divididas y, en cambio, son algunas confirmaciones con diferencias muy grandes cada una. Esto dificulta el uso de su historial para depurar problemas y hace que sea casi imposible revertir un solo cambio (al revertir una única confirmación).

Creo que al cambiar estas dos cosas en su flujo de trabajo, la pregunta más amplia de cómo gestionar un desarrollo y una twig de producción será más obvia.