2009-10-08 16 views
5

Estoy buscando en svn externals para mi empresa, y parece que sería una buena característica para nosotros. Tenemos varios productos que a menudo hacen referencia a los componentes compartidos, pero tienen la mala costumbre de atrasarse en las versiones anteriores e incluso en las bases de código de diferentes ramas a veces.Ayuda para entender SVN Externals

He leído un poco decente sobre cómo funcionan ahora, y creo que entiendo bien el concepto. En lo que no estoy 100% seguro es en cómo se unen las diferentes revisiones de múltiples repositorios.

Digamos que tengo un Producto y una Biblioteca. El Producto está construido contra la Biblioteca, por lo que su repositorio tiene una propiedad svn: externals que enlaza con la fuente de la Biblioteca. En ausencia de una versión específica en la definición svn: externals, cuando reviso HEAD of Product también obtengo HEAD of Library.

Creo varias versiones de Producto a lo largo de los años, cada vez haciendo referencia a la última versión de la Biblioteca. Un día, sin embargo, tengo que volver y echar un vistazo a la versión 1 del producto, seleccionando manualmente la revisión correcta. Cuando lo hago, ¿qué versión de Biblioteca obtengo, HEAD o la revisión que utilicé cuando la construí la primera vez?

Afortunadamente, he sido un buen desarrollador y me he acordado de etiquetar todas las versiones de Producto que lanzo. Cuando aplico mi etiqueta 'Product-1-0-0' al repositorio, ¿se etiqueta también la revisión correcta del repositorio de la Biblioteca? Si más tarde reviso el Producto según la etiqueta 'Producto-1-0-0', ¿la revisión correcta de la Biblioteca se revisa con ella?

Respuesta

6

Lo que hay que tener en cuenta con svn:externals es que debe especificar explícitamente la revisión si desea algo más que el enlace troncal. Google "pinning svn:externals" para los detalles. Si está utilizando una versión bastante moderna, 1.5 o posterior IIRC, entonces las versiones externas relativas son al menos compatibles. Las versiones anteriores, como la que estoy usando en la actualidad, requieren que fijemos explícitamente la revisión utilizando la opción -rNNNNN en la propiedad svn:externals para cada maldita carpeta.

Terminamos usando una modificación de una secuencia de comandos perl llamada svncopy.pl de tigris.org para hacer todas nuestras ramificaciones y etiquetados. No es tan malo, pero desearía haber sabido la cantidad de trabajo que era antes de que decidiéramos usarlos tan fuertemente.

+0

Para svn: externals, casi siempre debería fijar sus revoluciones. De lo contrario, si cambia algo en la cosa referida externamente, no puede hacer que su proyecto vuelva a su estado anterior. Además, te arriesgas a romper cosas sin saberlo. Ver http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-externals.html, "Usar números de revisión explícitos". –

5

Puede usar date specifiers para asegurarse de obtener las revisiones correspondientes cuando actualiza.

Lo hemos hecho para una herramienta que ejecuta PC-Lint; nos gusta ejecutarlo en cada revisión para que podamos diferir los resultados.

Es un poco desagradable en su aplicación - que:

  • determinar qué rev la copia de trabajo está en (utilizando svnversion)
  • determinar qué rev la cabeza es al (utilizando svn info)
  • agarrar las marcas de tiempo para todas las revisiones hasta e incluyendo la cabeza (usando svn log)
  • golpear las marcas de tiempo por .999 segundos para estar "seguro" obtenemos la rev (yay mágico!)
  • actualización para cada revisión (utilizando svn update -r {sometimestamp})
  • ejecutar PC-Pelusa en la copia de trabajo, diff, mailout, bocinas de activación, lo

(Complejidad digno de Rube Goldberg, ¿verdad? Votos favorables y gratitud eterna para cualquiera que pueda sugerir una mejor solución.)

Puede que también esté interesado en la sección del libro svn en Peg and Operative Revisions, que acabo de descubrir, esto parece ser una adición relativamente nueva.

1

Sí lo hará, suponiendo que proporcione un número de revisión explícito en sus externos, como se sugiere en el docs. De lo contrario, utilizará la revisión HEAD de los externos a los que se hace referencia.

Solo ten cuidado con el archivo basado en svn: externals en 1.6. Se ven muy útil, pero me acaba de golpear this bug hoy :(

2

Debe leer sobre los administradores de dependencias -. No estoy seguro de lo que su plataforma es, pero la hiedra y el experto en solucionar este problema de una manera mucho más limpia

svn: las versiones externas no están versionadas en subversión. Si alguien cambia la revisión o etiqueta de uno de sus externos, no tiene forma de saber lo que era antes del cambio.

Cuestiones relacionadas