La mejor manera de versionar diferentes ramas de git.

Tenemos el siguiente escenario: Tenemos varias versiones base de nuestro juego OpenLieroX; En este momento 0.57, 0.58 y 0.59. Para cada versión base, tenemos una rama separada. Cada una de esas versiones base tiene varios lanzamientos (como 0.57 beta1-beta8 y rc1, 0.58 beta1-beta9).

Cuando estamos trabajando en cosas nuevas, estamos trabajando en la rama de la versión base más alta (ahora mismo es 0.59). Cuando estamos solucionando algunos errores informados, lo hacemos en la versión más antigua (en su mayoría, 0.58) donde ocurrió. De vez en cuando, siempre fusionamos todos los cambios en 0.58 en 0.59 (siempre y cuando mantengamos y realicemos cambios en la rama antigua).

Todo esto funciona realmente bien hasta que se trata de algunos cambios que queremos tener solo en 0.58 pero no en 0.59. Esto solo sucedió en un caso hasta el momento: el número de versión. Tenemos un archivo Version.cpp (y también algunos otros archivos) que contiene el número de versión. Entonces, cuando queremos impulsar una nueva versión para 0.58, cambiamos la cadena de versión allí a "0.58 beta10" (o lo que sea). Ahora, cuando hacemos la fusión habitual de 0.58 a 0.59, este cambio también se aplicará. Solucionamos estos casos en este momento simplemente sobrescribiéndolos nuevamente con el número de versión correcto (o en los casos de otros errores, probablemente una reversión).

Este detalle sobre tales cambios no deseados parece ser un poco feo para mí. ¿Es la forma en que manejamos esto en general malo / poco común? ¿Cómo sería la forma más fácil de hacer esto para obtener el mismo resultado? Coger todos los compromisos de 0.58 en 0.59 sería mucho más trabajo.

También hay un detalle adicional que probablemente lo complique más: mientras trabajo en el código, tengo que establecer ya el número de la próxima versión. Esto se debe a que tenemos un motor de red y es posible que hayamos introducido algunas funciones nuevas y que haya verificaciones en el código como 'si (cliente-> versión ()> = Versión (X, Y, Z)) ...'. Ahora, cuando introducimos algo nuevo, generalmente significa en algunos puntos también tales controles. (Pero estamos tratando de evitar estos cambios en las ramas más antiguas).

Otro problema es que no solo contamos la versión (como 0.58.1, 0.58.2, ...) sino que contamos así: 0.58 beta1, 0.58 beta2, ..., 0.58 betaX, 0.58 rc1,. .., 0.58, 0.58.1, 0.58.2, ... Esto se debe a que queremos marcarlo como experimental para el inicio (etapa beta) y luego como mayormente estable o estable. En algunos casos raros, puede haber cambios serios (tal vez protocolo de red) incluso entre dos versiones beta diferentes (por supuesto, tratamos de evitarlos, pero a veces no es posible).

Respuestas a la pregunta(4)

Su respuesta a la pregunta