2010-09-07 14 views
5

Actualmente estoy trabajando en un proyecto en .NET que consta de varias capas lógicas y varios frontales. Aquí es una representación aproximada de nuestra estructura SVN:Subversion: Branch per Environment?

trunk 
---doc 
---lib 
---src 
------console 
---------console.vbproj 
------domain 
---------domain.vbproj 
------... 
------web 
---------web.vbproj 
---.sln 

Todo nuestro desarrollo del día a día que ocurre en el tronco - aquí es donde todos los desarrolladores Checkout desde/a cometer.

Estoy buscando una manera de implementar de forma limpia y fácil entre entornos (prueba y producción).

Mi idea es crear dos ramas, prueba y producción, desde trunk - solution y todo. Yo estoy justificando esto a mí mismo por las siguientes razones:

  1. tengo un control completo sobre la que fluyen las modificaciones a las que los entornos sólo por la fusión del tronco a la rama de prueba y de la rama de prueba a la rama de producción
  2. que pueda ver fácilmente qué código se está ejecutando en cada entorno simplemente mirando el registro de la rama correspondiente en Subversion

¿Alguien ha tenido alguna experiencia con una solución similar a esta? ¿Hay algún peligro potencial o descuido que me falta?

+0

Por si acaso alguien todavía tiene curiosidad, hay varias publicaciones en el blog sobre este enfoque; solo Google "rama por promoción".Creo que la mayor parte del material es solo una regurgitación de lo que Jeff Atwood originalmente escribió en su blog en octubre de 2007: [ver aquí] (http://www.codinghorror.com/blog/2007/10/software-branching-and -parallel-universes.html) – TMcManemy

Respuesta

7

¿Alguien ha tenido alguna experiencia con una solución similar a esta?

Sí :-)

¿Existen peligros potenciales u omisiones que me falta?

Se encontrará con el problema de que con el tiempo las ramas de prueba y liberación se alejarán del entorno de desarrollo, ya que es muy probable que no se fusionen todos los cambios del tronco. Los desarrolladores trabajarán en un entorno ligeramente diferente y perderán mucho tiempo manteniendo las ramas sincronizadas. Esto se conoce como merge-mania anti-pattern.

Prefiero asesorarme para crear una rama de versión desde el tronco para cada versión planificada una vez que haya implementado todas las funciones. En el momento en que sucursal, ambos son iguales. Luego, tenga un equipo para estabilizar y probar en la rama de lanzamiento. El desarrollo va en paralelo en el tronco. Una vez que se haya pulido su versión, combine las correcciones con el tronco.

Repita el procedimiento para cada lanzamiento. De esta manera, limitará el número de fusiones y hará que la gente trabaje en algo que siempre es la vanguardia.

Espero que estos aspectos lo ayuden en su decisión. El enlace también muestra muchos otros antipatrones. Haga una lectura para todos ellos, tal vez reconozca algunas lecciones aprendidas y obtendrá algunos consejos para resolverlo mejor.

+0

Con la metodología "sucursal por publicación", ¿cómo haría para automatizar la implementación? Por ejemplo, usando "rama por entorno" podría construir scripts de modo que cada rama se compile y despliegue en su entorno respectivo. Entonces, la implementación se vuelve tan fácil como fusionarse con mi rama deseada y ejecutar el script correspondiente. – TMcManemy

+0

Quizás no entiendo a qué te refieres con el medio ambiente. Por lo general, si hay un núcleo común, usted cambiará (o externalizará con svn: externals) el código específico del entorno. Entonces no hay necesidad de fusiones. Si puede ejecutar scripts para realizar fusiones, entonces debe haber algo conceptualmente incorrecto en su configuración. La fusión es un trabajo de valor agregado que no puede automatizarse en general. Si se puede automatizar, no se agrega valor, por lo que probablemente solo sea una sobrecarga innecesaria en su caso. – jdehaan

+0

Votación por presentarme la frase "fusionar manía". Eso llevó a una gran cantidad de patrones anti para la ramificación. Gracias jdehaan. – granadaCoder

2

Estamos utilizando el mismo diseño sin ningún problema. Asegúrese de usar la última versión de svn. La versión anterior a 1.5 no se debe utilizar debido a que falta el seguimiento de fusión.

Junto con una herramienta de seguimiento de errores como jira de atlassian (no estoy patrocinado) su configuración se vuelve aún más transparente.