¿El mejor enfoque para manejar aplicaciones clonadas?

Digamos que tengo un juego mobile simple, Fruit Wars *. Los jugadores se tiran naranjas, manzanas, plátanos, piñas, etc., recogen puntos, suben de nivel, etc. Lo está haciendo bien, y ahora me gustaría hacer títulos similares: Guerras Vegetales, Guerras de Sushi, Kosher Vegano Sin Gluten Guerras, etc., todas basadas en la misma base de código del clásico Fruit Wars. Cuál es la mejor estrategia, utilizando Git, para administrar la base de código de estos clones, teniendo en count lo siguiente:

(1) La mayoría de las características serán las mismas entre los clones, a exception de los charts, el text de la interfaz de usuario, y quizás algunas adiciones / cambios de funciones menores que posiblemente cambien el juego de maneras menores.

(2) Las adiciones a la base de código "core", como las correcciones de errores, solo deben hacerse una vez y combinarse fácilmente en clones.

(3) No se debe permitir (o debería ser muy difícil) que la funcionalidad específica del clon se empuje hacia arriba en la base del código del juego "central". Por ejemplo, si agrego un minijuego para hacer su propio rollo a Sushi Wars, la base de código de Vegetable Wars no debe verse afectada.

Mi instinto es ir con los subtreees de Git. ¿Cuáles son las otras opciones que debería considerar?

* En realidad, no estoy asociado con ningún juego que pueda existir llamado Fruit Wars

La otra opción es declarar un repo de git " core " dentro de cada uno de los otros repositorys de git del proyecto como un submodule .

Dado que un submodule puede configurarse para seguir una bifurcación , una vez que haya realizado una modificación en el core , todo lo que necesita hacer en otro proyecto utilizando core es:

 git submodule update --remote. 

Como el minijuego roll para Sushi Wars se agregaría en el tree de Sushi Wars (pero no en Sushi_Wars/core ), el repository core nunca estaría al tanto de esa nueva característica.