¿Hay alguna manera de desarrollar / liberar características 'cuando esté listo' sin usar las twigs de control de versiones?

Mi equipo ha estado usando Integración Continua desde hace un time, usando el enfoque 'todo entra en el maletero'. Estamos investigando el cambio de esta práctica para permitirnos lanzar funciones individuales tan pronto como estén lists, sin tener que esperar a que otras funciones se pongan al día (tenemos varios equipos trabajando en diferentes funciones a la vez). Hay muchos ejemplos sobre cómo hacer esto con estrategias de ramificación (twig por característica, etc.), usando git y similares, y ese es probablemente mi enfoque preferido. Pero los gerentes nos pidieron que al less investiguemos otras opciones, porque la preocupación es que una estrategia de bifurcación podría resultar en puntos de integración retrasados, lo cual queremos evitar. Sin embargo, no quiero que esto entre en una discusión sobre la estrategia de IC / bifurcación, así que trataré de ser específico en mi pregunta.

¿Alguien ha utilizado alguna estrategia para liberar funciones cuando está list, sin ejecutar múltiples twigs de control de versiones? Por ejemplo, usar Branching by Abstraction o algún otro medio para tener características con diferentes estados de 'preparación' en una sola twig. Si alguien tiene experiencia (buena o mala) con este tipo de enfoque, me gustaría saberlo.

El mecanismo de bifurcación por abstracción no se escala fácilmente para proyectos grandes con architecture henetworkingada, porque dicha "capa de abstracción" no siempre es fácil / rápida de introducir para aislar sus cambios.

Sin embargo, la otra idea que se menciona en este artículo es una cantidad muy pequeña de sucursales, con solo confirmaciones que representan una aplicación list para implementarse .
Eso es algo que un DVCS (VCS descentralizado como Git o Mercurial) puede acomodar fácilmente debido al mecanismo de publicación ( ortogonal a la ramificación ), y que permite:

  • no publicar (no enviar) compromisos privados hechos en un repository local (para que pueda ramificar / experimentar como quiera, y más importante aún, puede volver a establecer su trabajo en las sucursales oficiales muy a menudo y muy rápidamente para asegurarse de que su trabajo no divergir de una aplicación en funcionamiento)
  • publique (envíe) su trabajo, una vez que esté listo, solo en una twig 'troncal' o 'liberación' en un repository único que sirva como reference para todas las revisiones "listo para ser desplegado".

Eso no impide tener otros repositorys intermedios para compartir, con el fin de compartir trabajos intermedios, pero dado que dicho trabajo ha sido networkingiseñado localmente en la parte superior de la twig oficial, incluso ese esfuerzo de desarrollo puede ser desplegado y probado.

Pruebe un enfoque de ingeniería social para que los gerentes deseen no usar sucursales: use GIT con cada característica realizada en su propio clon GIT y empuje hacia el clon de publicación cuando esté listo. Tener un clon de CI para garantizar que los equipos desarrollen las funciones.

Entonces, el flujo de trabajo, comenzando una nueva característica es

Clonar la característica de implementación de repository de CI, extrayendo regularmente del repository de recostackción de datos de CI del repository de CI, y luego insert la característica de inserción de IC de CI en el repository de liberación.

Todas las asignaciones de funciones se pueden enrollar en una grande, si es necesario, o rastrearlas de manera que se puedan seleccionar fácilmente para empujar el sistema.

Con esta solución, nunca necesitarás hacer una sucursal.