¿Cuáles son los beneficios de "svn: externals"?

No sabría svn: external si no me he encontrado con esta página . Entonces, configuré mi carpeta de trabajo. Entonces

mkdir lib/vendor svn add --parents lib/vendor svn ps svn:externals 'symfony http://svn.symfony-project.com/branches/1.4/' lib/vendor/ svn ci -m "add externals" svn update 

La "actualización svn" alist toda la carpeta Symfony y es bastante lenta. Pensé que sería un dolor de time único. Sin embargo, SVN verificará el repository externo cada vez que escriba "svn up". Tengo que usar –ignore-externals para hacer "svn update" lo suficientemente rápido.

Me pregunto cuáles son los beneficios de svn: external si es tan lento. Prefiero copyr Symfony en mi propio repository, que seguramente es una solución más rápida.

SVN externos también tienen mucho que ver con la organización del proyecto. Los externos pueden ser repositorys SVN completamente diferentes, lo que significa que puede configurar diferentes types de security, protección, acceso, anzuelos precompuestos, anzuelos post-commit, etc. Es difícil hacer diferentes niveles de acceso para diferentes carpetas dentro de un solo repository SVN (sin la ayuda de algo así como VisualSVN ), y es muy difícil (y posiblemente poco inteligente) intentar hacer una copy de security o un método de security diferente para diferentes carpetas dentro de un único repository SVN. Los externos nos permiten más libertad al permitirnos unir varios repositorys diferentes con un solo svn up .

Casos de uso de Subversion Externals:

  1. Un caso de uso común es que un externo contenga una biblioteca u otra pieza de código inmutable. Si tiene un file .dll, puede simplemente colóquelo en su repository SVN y trátelo como parte de su código base, pero ha cubierto el hecho de que el .dll debería tratarse como de solo lectura y no era desarrollado por usted o su equipo.

  2. Otro caso de uso (que ha descubierto) es permitir que sus bibliotecas permanezcan en un repository de eliminación, tal vez una mantenida por un proyecto de código abierto activo. En este caso, siempre podría apuntar a una versión específica de un externo y no preocuparse por almacenarlo usted mismo.

  3. Finalmente, los elementos externos pueden incorporar troncos, twigs o tags, lo que significa que puede usarlos para unir un proyecto compuesto por diferentes versiones labeldas de sus propios modules. Esto se asemejaría más a algo como Rational ClearCase o cualquier otro sistema de control de versiones grande. Para ello, mantenga un repository SVN para cada module o componente de su base de código, cree una label de cada modo / componente y luego haga reference a las tags utilizando la propiedad externa de un repository principal, que existe solo para juntarlas en un proyecto de trabajo.

La forma de usar Externals es para las personas que desean trabajar en la revisión principal de algún código, por ejemplo, si se encuentra en un proyecto interno donde se desarrollan conjuntamente todo tipo de bibliotecas y aplicaciones. Por lo general, no debe hacer esto sin una buena razón, porque una revisión del código en un externo podría romper su código, y si no tiene derecho a corregir el problema externo, entonces trabajar con él se vuelve un poco engorroso.

Puede search una revisión específica del repository externo en la denominada twig de proveedor de su propio repository o agregar un cambio de argumento de revisión a su definición externa, como se explica aquí, por ejemplo:

http://thinkinging.com/2008/10/21/set-the-revision-of-your-svnexternals-or-else/

El mecanismo svn: externals se comporta como se anuncia. El problema es que está utilizando un repository público de subversión (al que se accede a través de Internet) dentro de lo que supongo que es un repository local. Como resultado, está viendo una discrepancia significativa en el time para actualizar el repository interno frente al referido externamente.

Copiar a su repository es ciertamente una solución viable. Cómo hacerlo está explícitamente documentado en el libro de Subversion .