Cómo administrar versiones de un software en un CVS con muchas bibliotecas

Estamos desarrollando un gran proyecto de software que consiste en una gran cantidad de proyectos, componentes y bibliotecas. Nuestra gerencia ha decidido que para cada implementación se debe save una instantánea de todo el sistema para que, cuando surja un problema, podamos tener fácilmente la versión exacta de todo el sistema. La solución habitual sería ramificar el proyecto después de cada deployment. Y por cierto, estamos usando VS2008 , C# y SVN . Pero esto no es un ejemplo práctico de la gran cantidad de subproyectos y bibliotecas que también tienen sus versiones y se modifican.

Una respuesta a este problema es tener compatibilidad con versiones anteriores y siempre solucionar problemas en la versión troncal, pero en nuestro caso no sería posible probar los cambios del sistema (el software es un sistema ITS y una vez que se implementa un sistema podemos no hagas más testings de integración).

Y para empeorar las cosas, los deftoments son modulares, por lo que cada vez se implementa una combinación diferente de componentes y también existe la localización.

¿Cómo estás resolviendo este tipo de problemas? ¿Hay alguna herramienta que pueda ayudar?

Puede usar un sistema de administración de dependencies como ivy , esto básicamente mantiene un logging de cada versión de cada dll que está utilizando.

Como resumen (muy) breve, cuando construyes (usando nant, por ejemplo), puedes conectar hiedra para resolver todas las dependencies, obteniendo las versiones específicas de dlls que necesitas. Como la configuration de ivy estará en svn, si obtienes una revisión anterior de tu código, también obtienes una versión anterior de la configuration de ivy.

Solía ​​trabajar en ese proyecto.

Solíamos ramificar cada versión de los candidatos e informamos las correcciones de errores aplicadas a la twig RC en el tronco. Eso no fue realmente útil, pero no pudimos encontrar una alternativa decente hasta que decidimos dividir el proyecto en muchos proyectos pequeños y bonitos administrados por un sistema parecido a un maven.

Tal vez el uso de alguna herramienta de administración de continuous integration asociada a rutinas de testing sólidas también podría ayudar.