tutorial tortoise tag subversion repositorio funciona español desvincular crear como comandos carpeta svn tortoisesvn

tortoise - ¿Cómo puedo acelerar las actualizaciones de SVN?



tag svn (12)

Tenemos un repositorio SVN bastante grande. Hacer las actualizaciones de SVN tarda más y más cuanto más agreguemos el código. Agregamos svn:externals a las carpetas que se repitieron en algunos proyectos como el FCKeditor en varios sitios web. Esto ayudó, pero no tanto.

¿Cuál es la mejor manera de reducir el tiempo de actualización y aumentar la velocidad de SVN?


Asegúrese de que su conexión al servidor sea lo más rápida posible (gigabit ethernet). Asegúrese de que el servidor tenga discos rápidos en una matriz. Y, por supuesto, solo revisa lo que necesitas.


He encontrado en mi propia experiencia (es decir, no a través de pruebas reales ) que, especialmente si el servidor de repo de SVN es remoto, el uso de elementos externos parece ralentizar las cosas. Si tiene código duplicado (como su editor FCK) en varios lugares, yo tendería a usar elementos externos, ya que mantener esos archivos sincronizados y manejables es más importante que las velocidades de actualización; sin embargo, podría usar enlaces simbólicos para llevar en cambio, en código duplicado. (Si usa Windows XP, puede usar puntos de unión ).


Hemos dividido nuestra base de códigos en varios módulos hermanos y escribimos los scripts Ant para que un desarrollador pueda trabajar en un módulo a la vez sin preocuparse demasiado por lo que está sucediendo en los otros módulos.

  • un script de compilación de alto nivel activa todos los scripts de compilación de módulos
  • las bibliotecas externas no se almacenan en Subversion sino que se extraen de una unidad de red utilizando Apache Ivy. (piénsalo como un repositorio interno de Maven).
  • las dependencias entre los módulos también se gestionan con Ivy.

Por lo general, los desarrolladores necesitarán actualizar todo su árbol un par de veces por semana, pero puede hacerlo fácilmente antes de ir a almorzar / tomar café.


Parece que tienes múltiples proyectos en un repositorio. Dividirlos donde sea apropiado te dará un gran impulso.

Supuestamente, Git es mucho más rápido que Subversion debido a la forma en que almacena / procesa los cambios, pero no tengo experiencia de primera mano con él.


Realmente no es una respuesta, pero puede ser interesante saber que uno de los motivos por los que svn es tan pesado es el hecho de que almacena una copia adicional de cada archivo en el directorio .svn / text-base. Esto hace que las operaciones de diferencia locales sean rápidas, pero se lleva mucho espacio de disco duro y E / S.

http://subversion.tigris.org/issues/show_bug.cgi?id=525 tiene los detalles.


Si tiene muchas carpetas en la raíz del repositorio y su copia local refleja el repositorio, intente cortar una copia local monolítica en muchas carpetas descargables separadas y actualice estas carpetas por separado también. Será realmente más rápido que una carpeta grande.


TotoiseSVN mira de manera predeterminada los cambios de archivos en el fondo y he visto que la velocidad de mi máquina disminuye. Cambié la configuración para excluir todo y luego solo incluí los directorios en los que tengo pagos. También puede desactivar las verificaciones de antecedentes. Ambas configuraciones están en el nodo de configuración de Icon Overlays.


Si se trata de un repositorio SVN anterior (o incluso bastante nuevo, pero no se configuró de manera óptima), es posible que utilice el estilo BDB anterior de la base de datos del repositorio. http://svn.apache.org/repos/asf/subversion/trunk/notes/fsfs tiene notas sobre el nuevo. Cambiar de uno a otro no es demasiado difícil: volcar todo el historial, reiniciarlo con el nuevo formato svn del sistema de archivos y volver a importarlo. También puede ser útil al mismo tiempo filtrar el repositorio de repositorios para eliminar registros completos de información inútil (por ejemplo, yo eliminé 20 MB + archivos tarball que alguien había registrado).

En cuanto a la velocidad general, un disco duro de calidad (veloz) y memoria extra para el almacenamiento en caché basado en SO sería difícil de fallar en términos de aumentar la velocidad de funcionamiento de SVN.

En el lado del cliente, si tiene torturas configuradas a través de PuttyAgent para acceso SSH a una máquina de repositorio externo, también puede habilitar la compresión SSH, que también puede ayudar.

Editar: SVN v1.5 también tiene la herramienta fsfs-reshard.py que puede ayudar a dividir un repositorio svn basado en FSFS en varios directorios, que pueden vincularse a diferentes ejes de unidades. Si tiene miles de revisiones, eso también puede ser de ayuda, si no por otro motivo que encontrar un archivo entre miles lleva tiempo (y diga si es un problema si observa los tiempos de IOwait)


El uso de derechos de acceso de lectura (es decir, restringir el acceso de lectura a ciertas personas / grupos) ralentizará mucho el repositorio. Especialmente cuando la autenticación se realiza de alguna manera especial, por ejemplo, contra un dominio de Windows. Lo mismo ocurre con los derechos de acceso de escritura, por supuesto, pero la escritura es menos frecuente que la lectura. Y restringir el acceso de escritura puede ser más importante que restringir el acceso de lectura


Deshabilite la comprobación de virus en las carpetas que contienen código de copia de trabajo. Esto causó que mis actualizaciones fueran el doble de rápidas.


Hay algunos ajustes de rendimiento comunes. SVN es muy pesado en E / S, por lo que los discos duros más rápidos son una opción (en ambos extremos). Agrega más memoria a tu servidor. Asegúrese de que sus clientes tengan un disco duro desfragmentado (para Windows).

Qué método de acceso usas también importa. Los repositorios almacenados en sistemas de archivos remotos (usando file: /// access) van a ser mucho más lentos que svnserve o Apache con mod_svn. Considere usar uno de estos últimos si tiene el repositorio en un simple recurso compartido de archivos.


En ocasiones, la operación lenta de svn, especialmente con muchos elementos externos, está relacionada con el DNS. Parece que svn realiza la búsqueda de DNS por cada svn: externo, incluso para los relativos. Agregar el nombre de host del servidor svn a / etc / hosts o arreglar resolv.conf puede ser útil.