tags vs branches en git

Tenemos un gran proyecto de Rails que se ejecuta en un server de producción y de etapas. ¿Es una buena idea crear tags cada vez que implementamos en etapas o producción (esto sucedería automáticamente con capistrano). ¿O es mejor crear twigs llamadas "desarrollo" y "puesta en escena", (el maestro contendría el estado de producción)?

Puede usar twigs para desarrollo, assembly y producción y, al mismo time, usar tags para identificar versiones de producción. Me gusta la forma en que git flow maneja esas twigs y te permite usar más sucursales para desarrollar nuevas funciones. Como desarrollador, nunca tendrías que ingresar código en la twig principal, y las fusiones en master también son raras.

Las tags en git son bastante duraderas: se propagan automáticamente cuando se busca desde un repository remoto, y si quieres limpiarlas tienes que hacerlo manualmente en cada copy. Por lo tanto, prefiero usar las twigs (y posiblemente sus reflogs) para marcar el deployment automático, porque de lo contrario probablemente sería enterrado en muchas tags muy pronto.

Marcamos cada una de nuestras implementaciones (automáticamente en nuestros scripts de implementación) con el objective de una recuperación rápida si es necesario, pero también son útiles como un historial de implementación. Por ejemplo:

 deployment_stag_20120804 deployment_stag_20120823 deployment_prod_20120715 deployment_prod_20120724 

Puede hacer que su script mantenga tags solo para el último número de implementaciones en N si desea evitar una gran cantidad de tags.

Una twig tiene más sentido si su método de implementación se fusiona, por ejemplo, en una twig de producción, en la que un gancho de git podría desencadenar un tirón en el server de prod.