Manera elegante de manejar código similar

Tengo un proyecto de software que funciona bien. Ahora, este proyecto debe ajustarse para modelar un sistema nuevo, pero relacionado. ¿Qué estrategias hay para mantener estos dos códigos bien organizados? Tendrán una base de código que es aproximadamente el 90% igual, pero hay muchas funciones que requieren pequeños ajustes.

He pensado en lo siguiente:

  1. Diferentes twigs en el git-repository: control perfecto de los dos proyectos, pero los cambios comunes deben hacerse en cada una de las twigs por separado.
  2. Modelado de diferentes modos de progtwig por C ++ pragmas (#ifdef Project1 …): esto mantiene los cambios locales, pero hace que el código sea difícil de leer.

No estoy muy satisfecho con estas soluciones. ¿Hay un mejor enfoque?

Tenemos el mismo problema y así es como lo resolvemos:

  • Solo tenemos una sucursal en nuestro repository git
  • Además de los files comunes, tenemos diferentes files según la configuration: access_for_config1.cpp, access_for_config2.cpp, …
  • Utilizamos un patrón de layout como fábrica para abstraer la parte específica para la parte común
  • Para piezas pequeñas y muy específicas en files comunes, tenemos una sección #ifdef según configuration
  • Tenemos diferentes reglas en nuestro file MAKE según cada configuration: para una configuration, comstackmos un file común + un file específico y establecemos el indicador correcto. Además, al usar eclipse en la oficina, también definimos una configuration de compilation diferente para permitir el resaltado correcto.

La ventaja de este enfoque es mantener la parte común siempre sincronizada, y aislamos correctamente cada parte específica.

Sin embargo, debe tener cuidado con una parte del código de cada configuration. Por ejemplo, con un código similar (pero no idéntico) en diferentes files específicos, el posible error se puede corregir en una sola configuration. Se puede networkingucir definiendo un fragment de código como plantilla común o repensando el layout para poner en común una parte

Espero que la respuesta te ayude

¿Qué estrategias hay para mantener estos dos códigos bien organizados? Tendrán una base de código que es aproximadamente 90% igual


No es exactamente lo que necesita, solo asegúrese de saberlo.

Submodules permiten que los repositorys extranjeros se Submodules dentro de un subdirectory dedicado del tree fuente, siempre apuntando a una confirmación particular.


Diferentes twigs en el git-repository: control perfecto de los dos proyectos, pero los cambios comunes deben hacerse en cada una de las twigs por separado.

Puede confirmar cambios en una twig y luego usar cherry-pick para agregarlos a cualquier otra twig que desee.