Software de 2 versiones: ¿el mejor enfoque de VCS?

Supongo que será mejor que explique mi situación:

Estoy en el process de desarrollar algún software, y estoy en la etapa en la que me gustaría dividir mi proyecto en dos twigs que difieren en características. Sucede que esta aplicación es una aplicación de Android que implementaré en Market, que tiene la limitación de que cada aplicación debe tener un identificador de package único (sensible, ¿no?).

Mi enfoque actual ha sido clonar el git repo de mi proyecto original, pero esto causa problemas con los nombres de los packages. Quiero que el sistema sea lo suficientemente robusto para que una corrección de errores / nueva function en una twig se fusione en otra twig, pero solo cuando yo quiera.

¿Alguien tiene alguna sugerencia?

Manejo ese caso exacto para una aplicación de pago y una versión de testing que tienen la misma base de código. Estoy usando SVN, pero cualquier software de control de versiones que admita la ramificación funcionaría.

Creé una twig para la versión de testing desde el maletero.

Luego modifiqué AndroidManifest.xml de la versión de testing para cambiar el nombre del package y agregué .trial al final. Luego tuve que actualizar todos los files java de actividad para hacer reference a la class R correcta.

Mi package de aplicación de pago es com.hewittsoft.baby
Mi package de la aplicación de testing es com.hewittsoft.baby.trial

En mis actividades en la twig de testing I hago esto

import com.hewittsoft.baby.trial.R; 

y eso hace que todas las references a R.id.textField (o lo que sea) funcionen.

Después de hacer los pasos que puedo desarrollar en la twig principal y luego fusionar los cambios en la versión de testing sin demasiado dolor.

Si el único problema es un problema de administración de packages y lanzamientos, puede aislar esos pasos (renombrar el package y probarlo en un entorno objective) del ciclo de historización dentro de un repository de Git.

De modo que podría continuar, separar su desarrollo, una function por twig, manteniendo los mismos nombres de package para ambos (para fusionar fácilmente las correcciones de una a otra).
Pero luego, para probar e implementar una de esas dos versiones, podría tener un script a cargo de renombrar los packages, recomstackr, empaquetar (jar) e implementar el resultado en el entorno de testing objective.

Un par de muy buenos artículos sobre estrategias de ramificación: http://codicesoftware.blogspot.com/2010/03/branching-strategies.html http://nvie.com/git-model