2009-07-17 14 views
6

En CVS tenemos un proyecto con varios directorios allí. Hay una compilación nocturna que tiene que extraer cosas de diferentes directorios en el mismo proyecto de CVS para construir la compilación nocturna. Así que debería tener eso en mente y tengo que modificar el script de compilación para verificar cosas desde diferentes repositorios si nos movemos a SVN.

Leí el control de calidad del SVN relacionado, pero tengo mi propia pregunta para la que necesito la respuesta.
que puedo hacer:
Diseño de SVN: mejor práctica

/trunk 
/tags 
/branches 
/3rdparty 

Donde todo lo que desarrollamos sale de la/del tronco y cualquier 3rdparty que no cambiamos va a/3rdparty.

Todo bien, ahora el script de construcción nocturno tiene que etiquetar el enlace troncal, verificar la etiqueta, verificar los elementos de terceros requeridos en los directorios adecuados, y luego iniciar el proceso de compilación.
El resultado de compilación (material compilado) puede permanecer en montura NFS durante un período de tiempo, por lo que el equipo de integración puede retroceder 2 semanas y volver a crear los problemas.

¿Están todas mis bases cubiertas?

Respuesta

9

El redbook SVN here incluye mucha información sobre diseños para diferentes tipos de proyectos y cómo gestionarlos.

Es posible que también desee utilizar ganchos/activadores/externos para obtener datos de un repositorio independiente llamado 'tercero'. Entonces, cuando un desarrollador revisa un repositorio, también obtiene la tercera parte. Hay muchísimas formas de separar las preocupaciones pero presentar un repositorio unificado a partir de los componentes.

Buena suerte

+1

+1 para mantener los componentes de terceros en repositorios separados. –

+0

Es posible que haya visto algunas cosas sobre la rama de publicación en el libro, será un buen favor si puede indicar dónde está exactamente. Gracias – pal4life

0

Mi script comprueba hacia fuera del tronco, modifica los archivos (ajusta los números de versión de los archivos AssemblyInfo.cs, etc.), entonces las etiquetas que. Si no necesita modificar los archivos de ninguna manera, entonces etiquetar primero también sería bueno.

Aparte de eso, su configuración me suena bien al menos.

+0

tiene que hacer referencia a terceros fuera de su carpeta base no es una buena idea. Crearía una carpeta en trunk \ lib y pondría todas las cosas de terceros allí. De esta forma puede evitar referencias fuera de su base. IMGLO –

+0

¿Ha publicado su script en algún lugar para que pueda echar un vistazo? Gracias – un33k

+0

Es un script de FinalBuilder, envíeme un correo electrónico (dirección en el perfil), y le enviaré una copia. A menos que estés usando FinalBuilder, aunque probablemente no te sirva de mucho. –

1

¿Por qué no se mueve al tercero al maletero? cuando cada rama una copia de terceros entra en la rama. Y obviamente no cambiarás cosas de terceros en branche porque tu sucursal ha codificado en base a las cosas de terceros existentes.

No estoy tan seguro de etiquetar de lo que está hablando. ¿Es ese el número de versión que quieres decir? Si es un número de versión, transfiéralo a través del script y rotúlalo.

+3

terceros en el maletero? Por favor no, de esa manera miente la locura. 3rdparty es básicamente una rama del vendedor del libro rojo, mantenerlos separados es mi voto. –

1

Si los "directorios múltiples" son componentes independientes que desea versionar de forma independiente, debe tener cada uno en su propio repositorio para poder etiquetarlos por separado. Pero si todo esto es un único proyecto autónomo (es decir, si generalmente etiquetará y ramificará todos los componentes), entonces probablemente pueda poner todo el código en el mismo repositorio.

Debería considerar usar externals para los artefactos de terceros.

2

Puede valer la pena utilizar un motor de compilación como hudson o control de crucero. El flujo de trabajo es ligeramente diferente: las etiquetas se crean después de la construcción, pero puede obtener módulos adicionales que le dan cierto control sobre eso. El punto es que todo el trabajo de desarrollo está hecho para ti, y obtienes un marco decente para tus compilaciones nocturnas, y obtienes una buena interfaz web para controlar y monitorear todo.

Personalmente, pondría algunas definiciones externas en el tronco para incorporar las bibliotecas de terceros apropiadas a los lugares apropiados. De esta forma, cuando cambia la versión de la biblioteca de terceros, realiza los cambios en el enlace troncal y no tiene que modificar los scripts de compilación. También significa que puede compilar versiones anteriores simplemente revisando la troncal/etiqueta/sucursal correspondiente. Ten en cuenta que solo hazlos en el maletero, dispersarlos puede conducir al asesinato.

También me capa del repositorio algo así como:

project 
/trunk 
/branches 
/tags 
3rdparty 

Simplemente porque esto le da más margen para la adición de proyectos de nivel más altos en algún momento. Hacer esto le permite administrar diferentes proyectos de forma completamente independiente y aún puede usar elementos externos para hacer referencia a las versiones correctas de uno a otro si hay dependencias, esto detiene muy bien los cambios en un proyecto que rompe/cambia silenciosamente los proyectos dependientes.

Es posible hacer esto usando repositorios separados también, lo cual está bien, pero en ese caso yo pondría la sección de terceros separada en un repositorio separado desde el principio.