¿Cuál es la forma correcta de mantener un proyecto que cumple con dos versiones de una plataforma?

Supongamos que tengo un proyecto implementado en un lenguaje de progtwigción específico cuyo uso está fragmentado en dos (o más) versiones, por cualquier razón.

Estas dos versiones proporcionan diferentes mecanismos para implementar algunas funcionalidades del proyecto. Por lo tanto, el mismo código no es portátil entre versiones.

¿Cómo organizar esta situación en un repository git? Sin embargo, ¿mantiene directorys para versiones específicas dentro de una twig? ¿Duplica twigs en el mismo repository? O utiliza diferentes repositorys para cada versión?

Depende un poco del lenguaje de progtwigción, pero si la diferencia entre las dos versiones resulta en una diferencia significativa en tu código, entonces me gustaría:

  1. define una interfaz que representa la funcionalidad cuya implementación necesita ser diferente.
  2. escribir dos implementaciones de esa interfaz.
  3. select el correcto en el time de compilation o el time de ejecución, según sea apropiado para el idioma y el proyecto.

Una vez que haya separado las dos implementaciones diferentes, puede mantenerlas en la misma twig del mismo modo que mantendría dos implementaciones diferentes de la misma interfaz en una twig.

Para una diferencia trivial, por ejemplo, si todo lo que necesitas es pasar banderas ligeramente diferentes a alguna function, entonces probablemente no me tome tanta molestia. En su lugar, solo haría el equivalente de:

#if NEW_PLATFORM // enable useful new flag 2 #define FLAGS 0x11 #elif OLD_PLATFORM // we can live without flag 2 if it's not supported #define FLAGS 0x1 #else #error what platform even is this? #endif 

Pero ten cuidado, las diferencias insignificantes pueden crecer a medida que se desarrolla el código, y terminas con un lío de código de detección de plataforma. Deberías intentar probar la plataforma en un lugar como máximo , o incluso mejor simplemente controlar todo con una opción de compilation. En el caso anterior, podría llamar a ese USE_USEFUL_NEW_FLAG lugar de codificar explícitamente que depende de una versión de plataforma en particular. Luego depende de su configuration de compilation saber qué plataforms admiten qué características.

Puedes lograr esto con twigs. Debe determinar durante una combinación qué puede y qué no puede cambiar entre ellos.

 git merge --no-commit 

hará la fusión pero no hará el paso de compromiso final. Esto le permite investigar si la solución aún funciona. Una vez que lo tenga funcionando, complete la fusión con

 git merge 

debería haber el post pnetworkingeterminado allí. Puede dejarlo tal como está o agregar más información sobre lo que hizo para que esta versión específica funcione.