2011-07-07 10 views
8

Mi clon Mercurial se ha vuelto increíblemente lento, presumiblemente debido a la fragmentación en el disco. ¿Hay alguna forma de optimizarlo?¿Puedo optimizar un clon Mercurial?

La manera obvia de hacer un nuevo clon, luego copiar mi MQ, paquetes guardados, hgrc, etc. en el nuevo clon y eliminar el anterior. Pero parece que alguien podría haberse topado con este problema antes e hizo una extensión para hacerlo?

+0

Por lo que sé sobre Mercurial, no debería haber nada que Mercurial haga que sea lento en lo que respecta a la fragmentación, etc. ¿Ha intentado ejecutar un desfragmentador de disco normal en su disco? Además, ¿qué tipo de operaciones son lentas, y qué lentas, etc.? –

+0

hg qref es lo realmente lento. Tarda quizás 50 segundos en un repositorio con 70000 commits. Estoy de acuerdo en que no es un problema específico mercurial (aunque creo que los patrones de acceso mercurial lo exacerban), pero Mac no tiene un desfragmentador incorporado (AFAICT). –

Respuesta

0

Eliminé el repositorio y recloned, y eso mejoró el rendimiento.

+0

Lo que significa: pierdes todo el historial. Esta es una solución rara y ventajosa. – Abel

+0

Abel: ¿por qué perderías toda la historia? –

+0

Oh, lo siento, entendí mal, pensé que solo querías una copia de la propina. Todavía no estoy seguro de cómo puede volver a sellar lo que eliminó. ¿O te refieres a dejar el estado del servidor como está y simplemente tomar un nuevo clon? Es decir, ¿quiso borrar solo su clon local? ¿No es lo mismo que purgar? – Abel

-2

Desactive la supervisión antivirus en tiempo real de la carpeta en la que se clona el repositorio y defragüe. No hay mucho más que puedas hacer.

7

Si el manifiesto es particularmente grande, puede dar lugar a un rendimiento lento. Mercurial tiene un formato de repositorio alternativo - generaldelta - que a menudo puede dar como resultado manifiestos mucho más pequeños.

Puede comprobar el tamaño de su manifiesta usando:

ls -lh .hg/store/*manifest*

Para obtener el máximo valor de generaldelta:

  1. Instalar Mercurial 2.7.2 o posterior (2.7.2 incluye una se corrige un error en generaldelta que podría dar como resultado tamaños de manifiesto más grandes, pero hay una gran probabilidad de que no le pegues al error con una versión anterior).

  2. Ejecutar hg --config format.generaldelta=1 clone --pull orig orig.gd.

Esto puede mejorar el tamaño del manifiesto, pero no todos los beneficios.

  1. Ejecutar hg --config format.generaldelta=1 clone --pull orig.gd orig.gd.gd.

El clon del clon puede proporcionar una mejora mucho mayor en el tamaño del manifiesto. Esto se debe a que al extraer de un repositorio generaldelta, las cosas se reordenarán para optimizar el tamaño del manifiesto.

Como un ejemplo de los beneficios potenciales de generaldelta, recientemente convertí un repositorio que era ~ 55000 confirmaciones de SVN (extraído mediante hgsubversión) más ~ 1000 commit/merges/injertos de Mercurial, etc. El manifiesto en el repositorio original era ~ 1.4GB. El manifiesto en el primer clon era ~ 600MB. El manifiesto en el clon del clon era ~ 30MB.

No hay mucha información sobre generaldelta en línea, todavía hay trabajo por hacer antes de que pueda convertirse en el formato predeterminado, pero funciona bien para muchos proyectos. Los primeros resultados de búsqueda de Google contienen información desde el momento en que se introdujo por primera vez, y hubo una discusión reciente sobre la lista de correo de mercurial-dev.

+0

+1 Incluso para un repositorio más pequeño de ~ 3400 confirmaciones y un tamaño de manifiesto original mucho más pequeño ~ 17MB, los dos clones redujeron algunas operaciones de hg a un tercio del tiempo original (el manifiesto final fue de 11 MB). –

Cuestiones relacionadas