es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema en Git diff con commits recogidos mediante cherry-pick.

Estoy viendo un error en nuestro proceso de construcción de versiones. Necesito tu ayuda/sugerencias al respecto.

En nuestra organización seguimos la estrategia de versiones de la siguiente manera:
nuestro código base tiene microservicios/aplicaciones ubicadas en carpetas individuales con este formato:
MS-A
MS-B
MS-C
MS-D
Nuestros procesos de versiones siguen este flujo de trabajo:
la rama-1 ha realizado cambios en MS-A y los ha fusionado con la rama master
la rama-2 ha realizado cambios en MS-B y los ha fusionado con la rama master
a partir de la rama master creamos la rama de versión R1 y realizamos el proceso de versión, donde solo se implementan MS-A y MS-B
luego de manera similar,
la rama-3 ha realizado cambios en MS-C y los ha fusionado con la rama master
la rama-4 ha realizado cambios en MS-D y los ha fusionado con la rama master
luego de la rama master creamos la rama de versión R2 y realizamos el proceso de versión, donde solo se implementan MS-C y MS-D

Durante la versión, básicamente hacemos una diferencia git R2 R1 y calculamos en qué carpetas se actualizaron las actualizaciones y luego iniciamos la implementación de solo esas carpetas (es decir, microservicios).

Ahora, cuando hay algún error durante la implementación, creamos una rama de corrección de errores desde la rama master (que naturalmente se adelanta al encabezado de la rama de versión ahora), enviamos los códigos corregidos allí, los fusionamos con la rama master y luego solo tomamos esa identificación de confirmación en la rama de versión y volvemos a implementarlos.

Por lo tanto, hemos estado viendo que ocurre un problema: cuando la diferencia git está calculando los cambios en dos ramas de versión, no está teniendo en cuenta las identificaciones de validación recogidas como parte de la versión anterior, sino que las considera como parte de la próxima rama de versión en sí misma.

Un ejemplo breve utilizando el ejemplo del flujo de trabajo de versión descrito anteriormente visualizará fácilmente este error:

Digamos que en la versión R1, MS-A y MS-B se implementaron y hubo algún problema con MS-A por el cual creamos una rama de corrección de errores B-1. Enviamos las confirmaciones a B1, las fusionamos con la rama master y tomamos esas confirmaciones de cereza en la rama R1. Luego, después de que se completó la versión R1, hicimos cambios en MS-C y MS-D y los fusionamos con la rama master y creamos una nueva rama de versión R2. Entonces, si hago una diferencia git R2 R1, quiero que la salida sea solo MS-C y MS-D, pero aquí obtenemos MS-A, MS-C y MS-D. Git no está considerando las confirmaciones B-1 de cereza como parte de la R1.

Teniendo en cuenta el escenario anterior y sin poder realizar cambios en todo el proceso de flujo de trabajo de versión, ¿hay alguna manera de solucionar este problema?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución a este problema es utilizar el comando git cherry en lugar de git diff al calcular los cambios entre las ramas de lanzamiento. git cherry compara dos ramas y muestra los commit que no se han aplicado en la otra rama. De esta manera, los commits cherry-pick también se considerarán como parte de la rama de lanzamiento anterior.

    Por lo tanto, en lugar de ejecutar git diff R2 R1, se puede usar git cherry R1 R2 para calcular los cambios entre las dos ramas de lanzamiento.

    Otra opción es incluir los commits cherry-pick en las notas de lanzamiento o en los comentarios de la rama de lanzamiento, para que se documente claramente qué commits se agregaron a la rama de lanzamiento después del lanzamiento inicial.

    Es importante tener en cuenta que cherry-pick commits a veces puede introducir conflictos o comportamientos inesperados, por lo que se recomienda usarlo con moderación y considerar otras opciones como el rebasing o el merging, dependiendo de la situación.

Comments are closed.