Cómo actualizar los externos de Subversion

Tenemos varios repositorys de subversión: uno para código común y uno para cada proyecto de nivel superior. Los proyectos de nivel superior tienen un svn: enlace externo al tronco del repository común.

Antes de build un lanzamiento de un proyecto, creamos una twig del proyecto de nivel superior y también creamos una twig paralela en el repository común.

¿Cómo podemos garantizar automáticamente que la propiedad svn: external en el proyecto de nivel superior ramificado apunte a la twig paralela en el directory común? En este momento estará apuntando a "trunk" en el repository común. Actualmente tenemos que editar esto manualmente en el proyecto ramificado.

Gracias

Si te entiendo, quieres asegurarte de que foo y bar compartan la misma sucursal. foo es tu proyecto maestro y tiene un svn:externals en algún lugar apuntando a la bar . Cuando twigs foo , quieres asegurarte de que bar esté usando la misma twig. La única manera de garantizar eso es crear su repository con los directorys de tags y branches en la raíz de su repository en lugar de en la raíz del proyecto (como la mayoría de los sitios lo hacen).

Luego puede usar references externas relativas para apuntar desde el directory foo que contiene el svn:external back to bar . Además, si label foo y barra con la misma label, foo y barra mantendrán su relación:

 $ svn propset svn:externals ../../bar common 

Si sus twigs estaban en la raíz de su repository, entonces el directory common apuntará a la misma twig para foo que está en la bar .

El gran problema con snv:externals es que si no tienes cuidado, estás apuntando a una versión siempre cambiante del directory al que estás vinculando. Digamos que alguien hizo esto:

 $ svn propset svn:externals /projects/bar/trunk common 

en mi proyecto foo . Hago un lanzamiento y copio foo a una label. Sin embargo, el directory common que he labeldo se modificará cuando alguien actualice la bar/trunk . Esto hace que sea casi imposible rebuild foo .

Cuando uso svn:externals , siempre me aseguro de estar enlazando a una versión labelda de la bar , o una revisión específica, y si estoy enlazando a una revisión específica, también pego mi URL a esa revisión en caso de que alguien decida para eliminar el directory que estoy vinculando a mi propiedad svn:externals .

No hay nada en Subversion que actualice automáticamente tus properties de svn:externals , pero puedes search todas las svn: externals en un tree de directorys usando

 $svn propget -v -R svn:externals . 

He descubierto que svn:externals suele terminar siendo un dolor mayor de lo que vale.

En cambio, simplemente almaceno el object construido de la bar o una copy comprimida de la fuente en mi repository de versiones, y como parte de mi procedimiento de compilation, copio el object o la fuente comprimida de mi repository de versiones.

Utilizo repositorys de sitios de Maven como Nexus o Artifactory como mi repository de versiones, incluso si no estoy haciendo un proyecto de Maven o incluso trabajando en un proyecto basado en Java. El repository local de Maven proporciona todas las herramientas que necesita para cargar y download sus packages dependientes, además de que Maven tiene el concepto de repository de versiones, donde el código nunca cambia, y un repository de instantáneas en el que planea liberar el código, pero podría cambiar Esto es útil si sospecha que la bar puede cambiar debido a las cosas que necesita en foo .