Tengo un conjunto de herramientas de software bien establecido, pero que a menudo necesita pequeños retoques (principalmente para hacer frente a problemas de compatibilidad de productos de terceros). Ahora deseo producir una versión "nueva" (API mejorada), que se basará en el original; esto divergerá de la rama existente en el tiempo, pero durante algunos años, tendré que mantener el "en vivo" original para clientes existentes que lo necesitan para compatibilidad. Por supuesto, yo también necesito asegurarme de que los "ajustes" se apliquen también a la versión "nueva", ya que tales problemas (en la mayoría de los casos) también se aplican a la "nueva" versión.¿Cuál es la mejor manera de administrar versiones paralelas en Git?
Por lo tanto - mi ideal (simple) de flujo de trabajo sería:
- Cuando se trabaja en la "nueva" versión - cambios sólo se aplican a esa versión .
- Cuando trabaje en la versión "anterior", todos los cambios resultantes (¡lo más automáticamente posible!) Se aplicarán a ambas versiones una vez que estoy satisfecho con ellos (cuando confirmo, envío o lo que sea).
Me doy cuenta de que habrá una necesidad de intervención manual ocasional, donde las fusiones son conflictivas, pero esperaría que eso fuera raro, basado en la experiencia de cambios manuales en el pasado.
Por el momento, estoy buscando abandonar VSS (sí, ¡sigue riéndome de tanto que lo sigo haciendo!), Y esperaba que Git lo hiciera fácil, pero hasta ahora, no aparece a cualquier solución "simple", con las sugerencias que he visto que se construyen alrededor de "rebase", lo que me parece "incorrecto", ya que rebase parece hacer muchas otras cosas como reescribir el historial, cuando todo lo que necesito sea una simple y genuino "avance" basado en los cambios de la otra rama.
- ¿Echo a perder algo aquí?
- ¿Existe una manera más fácil y bien definida de hacer esto?
- ¿Sería mejor con un sistema de control de fuente diferente en lugar de Git?
Todos los pensamientos muy apreciados!
Creo que te falta algo aquí, ya que 'rebase' fue diseñado * exactamente * para tu caso de uso. Reescribe la historia porque * se supone que *. Si lo está haciendo bien, solo reescribe el historial en una rama local específica, por lo que no se reescribe ningún historial en un repositorio central. –
También podría hacer una combinación directa para simplificar las cosas, pero rebase es una mejor solución. –
Relacionados: http://stackoverflow.com/questions/457927/git-workflow-and-rebase-vs-merge-questions –