Obstáculos para usar Git Flow en Subversion

10

Mi equipo en el trabajo está comenzando un nuevo proyecto, usando Subversion como nuestro VCS (puede considerar este conjunto en piedra para el propósito de esta pregunta). Todavía estamos en las primeras etapas del proyecto y estamos tratando de acordar un modelo de ramificación. Nuestro proyecto anterior se basó en un modelo de versión no estándar que generó problemas al administrar hotfixes y parches para las versiones existentes.

He encontrado que los diferentes modelos de ramificación son bastante complicados, pero un modelo que entiendo con bastante claridad es git flow . Tengo curiosidad por lo difícil / indeseable que sería implementar una variación de esto en Subversion. Obviamente, habría alguna diferencia en términos de personas que colaboran en las sucursales. Las ramas de características tendrían que estar centralizadas en lugar de limitarse a repositorios locales, pero los otros conceptos del modelo deberían ser reproducibles en Subversion tal como lo entiendo.

Cuáles serían los inconvenientes o desafíos de este enfoque. Lo que he escuchado es que en SVN "la fusión es costosa" en relación con Git. Pero no estoy completamente claro sobre lo que esto significa en la práctica o cómo afectaría nuestra capacidad de usar un flujo git como un modelo de ramificación.

¿Cuáles serían las mayores preocupaciones con este enfoque? ¿Existe un enfoque igualmente claro que sea más natural en Subversion?

Ben McCormick
fuente

Respuestas:

12

Gitflow se basa en las mejores prácticas de versiones y ramificaciones de código fuente. Un muy buen artículo sobre esto es Advanced SCM Branching Strategies.

El punto que hace Vance en el artículo vinculado es que las diferentes ramas tienen roles diferentes . Identifica los roles de:

  1. Línea principal (todas las ramas desde aquí)
  2. Desarrollo (donde se realiza el trabajo de desarrollo)
  3. Mantenimiento (donde se realiza el trabajo de mantenimiento)
  4. Acumulación (unir las cosas en preparación para la liberación)
  5. Empaquetado (empaquetado de la compilación para el lanzamiento)

En gitflow, estos son:

  1. Desarrollar
  2. ramas características
  3. Ramas de revisión
  4. Liberar ramas
  5. Maestro

El artículo sobre ramificación fue escrito con Perforce en mente. Perforce es un VCS centralizado, al igual que svn. Los patrones de ramificación que describe se corresponden perfectamente con svn.

La clave para darse cuenta es que no es cómo se transfiere gitflow a svn, sino cómo aplicar los mismos conceptos fundamentales de ramificación y los roles de las ramas a diferentes estructuras de VCS.

Recomiendo encarecidamente leer el artículo, no puedo darle mucho crédito. La forma en que se describen las cosas allí se basa en una filosofía de construcción de troncal / línea principal a la que le resultará fácil asignar svn.


fuente
1
¡Volver a las ideas que lideran el diseño de gitflow es una mejora inteligente de la pregunta original!
usuario40989
@ user40989 No estoy seguro de si Vincent Driessen (nvie) había leído el artículo o no que presentaba este concepto de ramificación, o si redescubrió esto por su cuenta. De cualquier manera, el reconocimiento de cuáles son los roles necesarios para un flujo de trabajo a través del control de versiones hace que sea fácil ver las similitudes entre los enfoques y las mejores prácticas.