Fuera del reloj voy a tratar de idear una estrategia para el control de versiones para mi empresa; actualmente usamos SVN pero no hay estructura, básicamente solo tenemos un enlace troncal y solo nos comprometemos a eso. Recientemente, el gerente de desarrollo comenzó un segundo repositorio que actúa como nuestra "etiqueta", pero debe fusionarse manualmente con el "tronco", ya que no es parte del mismo repositorio, sino uno completamente separado. En efecto, solo hay una carpeta, llamada "Dev" (en realidad hay diferentes carpetas "Dev" en diferentes fechas pero solo "Dev" es la principal) y debajo de eso está todo lo demás; Todos los demás proyectos. No está organizado por proyecto en absoluto, no tiene ningún concepto de ramas / etiquetas / troncales ni nada. La persona que lo configuró inicialmente (hace mucho tiempo, por supuesto) parecía no saber cómo configurar SVN en absoluto, y desde entonces nadie se ha molestado en aprender a hacer las cosas correctamente por miedo a romper algo. No usamos ningún tipo de CI (o pruebas automatizadas, desafortunadamente).
Primero, ¿deberíamos separarlo por proyecto? Por ejemplo, tenemos: dos sitios web ASP.NET (no aplicaciones web, sitios web), un servicio web, una carpeta de implementación para todos los scripts de tabla y procedimientos almacenados, dos clientes de línea de comandos para proyectos externos que son llamados por el Sitios web y una carpeta compartida que tiene objetos comerciales comunes y similares. Si cada uno de estos es su propio proyecto con una configuración de ramas / etiquetas / troncales, o debería ser así:
dev/
branches/
tags/
trunk/
Site1/
Site2/
WebService/
SharedCode/
y tiene todas las ramas y todo tiene una copia de la carpeta Dev completa? Ese enfoque podría ser más fácil de aceptar, ya que a menudo tenemos situaciones en las que necesitamos hacer cambios en la biblioteca de códigos compartidos y al menos uno (generalmente ambos) de los sitios web también.
En segundo lugar, hacemos lanzamientos regulares ("empuje" en nuestro lenguaje) a nuestro servidor de desarrollo y servidor en vivo. Por lo que he leído, la mejor manera de manejar esto sería que todo el desarrollo vaya al tronco /, las ramas son "temporales" y se usan para agregar una nueva característica que podría afectar el tronco, y las etiquetas son para lanzamientos. Entonces, presionamos cada mes, digamos, y estoy trabajando en un nuevo módulo. Yo bifurcaría el tronco y usaría esa rama para mi código, escribirlo y probarlo y lo que sea. Cuando el módulo esté terminado, lo fusionaría nuevamente en el tronco (y tal vez eliminaría la rama), y cuando estemos listos para implementar lo etiquetaríamos ("May2011", digamos). Si tenemos una corrección de errores después de que se active, se corregirá en la etiqueta de mayo de 2011 y se fusionará con el tronco (para que el tronco también obtenga la solución), y luego mayo2011 sería expulsado nuevamente con la solución? ¿Es esta la intención de etiquetar?