version-control - versionador - software para control de versiones de archivos
Se acerca el control de versiones en Scrum (7)
Cada vez que tenemos una historia o un conjunto de historias que amenaza con dejar la rama maestra en desorden durante varios días o involucra a ''muchos'' desarrolladores, creamos una rama para eso (no es muy común, intentamos encargar cosas para evitar esto, pero sucede) como una especie de cosa de mitigación de riesgos. Queremos asegurarnos de que la rama maestra siempre esté lista para ser lanzada al final de cada sprint, incluso si eso potencialmente significa que es posible que no hayamos aumentado el valor de la rama maestra después del sprint.
La rama historia / función / tarea se sincroniza con la rama maestra muy a menudo, y el objetivo es siempre volver a fusionar la rama mucho antes del final del sprint.
Por supuesto, todos usamos '' git '', por lo que, en efecto, siempre tenemos una sucursal local en la que trabajamos, y nos hemos vuelto bastante buenos sincronizando con el maestro con la frecuencia suficiente para evitar integraciones de big bang y rara vez lo suficiente para no dejarnos inútiles. / Código no utilizado en la rama maestra.
Aparte de eso, hacemos " branch-by-purpose " (PDF). También escribí un poco más sobre cómo hacemos git here .
Recientemente, con mis compañeros de trabajo, estábamos discutiendo cómo organizar el control de versiones en un proyecto Scrum. Más específicamente, los criterios para la creación de sucursales (por desarrollador, por tarea, por historia, por Sprint?) Y los métodos de integración.
Mi opinión fue que una forma útil de organizarlo es crear una rama para cada historia de usuario, para que pueda integrar cada historia en el tronco liberable una vez que se complete y también le permite tener siempre una "versión de entrega" de la aplicación. en cualquier momento.
Por lo tanto, si una historia no se puede completar, se puede dejar de lado y no compromete el lanzamiento del sprint. (Eso considerando una herramienta centralizada, puede ser si usar una distribuida las consideraciones serían diferentes)
Me gustaría conocer sus propios enfoques, qué tipo de herramientas prefiere y los pros y los contras que ha visto con la experiencia y las lecciones aprendidas.
El único cambio que debe hacer a su sistema de versión de origen es integrarlo con el sistema de integración continua (como TeamCity o CruiseControl.NET ).
Sí, sé que realmente no estoy respondiendo a tu pregunta pero realmente lo digo en serio. En el proyecto de software ágil, usted quiere poder lanzar el producto a los clientes (o poder hacerlo) tan a menudo como sea posible. Es por eso que necesita saber que todo lo que esté en su sistema fuente está funcionando o si no está funcionando, por qué no está funcionando.
Ese es un tema muy interesante en realidad.
Siempre aplicamos la creación de la rama por tarea, de hecho, cada tarea (no historia, sino tareas reales descompuestas después de la reunión de planificación de scrum) tendrá al menos una rama asociada.
Puedes ver cómo se ve en el siguiente diagrama:
Esto hace que sea muy fácil alentar las revisiones por pares, ya que el equipo puede verificar lo que se modificó en una tarea (rama), incluso cuando los desarrolladores decidieron realizar muchas confirmaciones intermedias (¡lo cual es una muy buena práctica!)
Hay varios enlaces a continuación que pueden ser útiles:
Mantener el protocolo de ramificación ligero. En Scrum, si alguien quiere bifurcar el código para trabajar en una característica específica, déjelo. Nadie debe tener miedo de ramificarse. Este es uno de los beneficios de DVCS: las personas se ramifican cuando quieren y no están sesgadas por las reglas o los estándares del equipo.
Para mi dinero, es una base de caso por caso, y si comienza a ver patrones en sus procesos de desarrollo, formalícelos para que todos estén en la misma página.
Solo asegúrese de que cada desarrollador entienda que es su responsabilidad integrar y fusionar sus cambios. Eso debería establecer la barra alrededor del lugar correcto para garantizar que las personas hagan la llamada correcta en cuanto a cuándo derivar el código.
No veo cómo una rama por característica puede hacerte más ágil o delgado. El costo de la administración de la sucursal es demasiado alto. Yo diría que si sientes que necesitas una rama por función, tus historias son demasiado grandes. Una historia debe ser completada por el siguiente scrum y si no, ciertamente por el siguiente. Entonces, si una sucursal solo existe durante 1 o 2 días, no veo cómo puede ser útil o su costo reembolsado. Es una rutina que muchas personas trabajen en una historia, así que a veces uso una rama dev para que los desarrolladores trabajen para poder combinar el código muchas veces al día mientras trabajo en la misma historia sin que se implemente el código para la prueba (rama principal) . Lo ideal sería tener tan pocas historias en progreso y completarlas tan rápido que solo necesitaría la rama Principal y ninguna otra.
Una rama por historia de usuario me suena bastante excesiva. Mantenemos una base de código única (troncal) y trabajamos fuera de esto. La única vez que normalmente nos bifurcaríamos es para solucionar un problema de producción actual que no podía esperar hasta un lanzamiento regular.
Yo usaría una rama por lanzamiento, y la Integración continua para evitar que una historia de usuario dañe a las demás.