2012-08-31 10 views
8

Entonces, por ejemplo, si hay un repositorio mercurial https://code.google.com/p/potentiallyLarge ¿hay algún comando que me permita conocer su tamaño antes de clonarlo? Algo como¿Cómo averiguar el tamaño de un repositorio de mercurial?

hg size https://code.google.com/p/potentiallyLarge 

Además, ¿hay un comando para hacer esto para los repositorios de subversión?

+0

Estoy muy interesado en la respuesta a esto para SVN, ya que estoy buscando tener que clonar un repositorio SVN de 10 + GB (determinado por svn list -R) con> 10000 revisiones usando Mercurial (hgsubversion) a través del Internet. –

+0

@TimDelaney en su caso, probablemente sea mejor utilizar 'svnsync' y clonar desde ese repositorio localmente. Sólo una suposición sin embargo. –

+0

@ Ry4an He pensado en hacer eso (y luego cambiar la URL al SVN ascendente). La desventaja es duplicar el espacio de almacenamiento (al menos temporalmente). Además, no tengo idea si obtendré alguna ventaja en los datos totales transferidos. Estoy configurando un repo de Hg para desarrolladores locales con sincronización bidireccional. Obtuve el flujo de trabajo determinado y probado para permitir que todos trabajen como lo harían normalmente con Hg (ramificación, combinación, etc.) con algunos ganchos para evitar la rotura accidental del flujo de trabajo (no se fusiona con la rama SVN ...). Va a ser ese clon inicial lo que será un dolor. ¿Lo consigo todo o solo un subconjunto? –

Respuesta

2

Actualización: Mi respuesta a continuación es incorrecta, pero la dejo aquí ya que MG proporcionó buena información en respuesta. Parece que la respuesta correcta es "no".

No es una gran manera, pero una especie de camino de ida y vuelta. Un hg clone URL es realmente sólo hg init ; hg pull URL Y el comando hg incoming te dice lo que se obtendría si se hizo un tirón, por lo que podría hacer:

hg init theproject 
cd theproject 
hg incoming --stat URL_TO_THE_PROJECT 

y obtener una estimación bastante decente de la cantidad de datos que le tira abajo si usted sigue con:

hg pull URL_TO_THE_PROJECT 

no estoy seguro acerca de la eficiencia de la red de hg incoming pero no creo que se descarga todo de todos los conjuntos de cambios, aunque podría estar equivocado acerca de eso. Ofrece una opción --bundle que guarda todo lo que ingresa para un archivo desde el cual puede tirar más tarde para evitar la doble descarga.

+0

El comando entrante ** descargará todo ** ya que no hay forma de que un cliente diga "por favor, dé el registro de cambios para este o aquel conjunto de cambios". –

+0

Blast, esperaba que pudiera descargar "encabezados" pero no los "deltas" reales. –

+0

Sí, eso es lo que esperarías de la salida ... pero desafortunadamente no puede hacer esto hoy. –

4

El tamaño utilizado en el disco es diferente del ancho de banda utilizado para hacer un clon. Algunos sitios de alojamiento (como Bitbucket) muestran el tamaño en el disco para que sepa por adelantado cuánto espacio necesitará en su sistema antes de clonar. Pero puedo ver que Google Code no lo hace, por lo que no te ayudará aquí.

El Mercurial wire protocol no expone ningún comando que pueda indicarle cuán grande es un repositorio. Cuando haces un clon normal, el cliente no sabe por adelantado cuántos datos recibirá, solo recibe una secuencia de datos. Después de recibir el registro de cambios, el cliente conoce cuántos manifiestos y registros de archivos se esperan, pero no conoce el tamaño de ellos.

De hecho, es difícil para el servidor calcular la cantidad de datos que utilizará un clon: el ancho de banda de red utilizado es menor que el espacio en disco ya que la compresión utilizada es diferente (bzip2 vs gzip). Sin embargo, si usa --uncompressed con su clon (que Google Code no es compatible), entonces hay un truco, vea debajo.

La única forma de saber cuánto ancho de banda utiliza un clon es hacer uno. Si usted tiene un clon ya se puede utilizar para simular hg bundle un clon:

$ hg bundle --all my-bundle.hg 

El tamaño del paquete le dirá la cantidad de datos que hay en el repositorio.

Un truco: Si Google Code hubiera sido compatible con hg clone --uncompressed, ¡podría usarlo para conocer el tamaño de un repositorio remoto! Cuando usa --uncompressed, el cliente le pide al servidor que envíe el contenido del directorio .hg/ tal como está, sin volver a comprimirlo con bzip2. Convenientemente, el servidor inicia la transmisión al decirle al cliente el tamaño del repositorio. Por lo tanto, puede iniciar dicho clon y luego cancelarlo (con Control-C) cuando su cliente haya impreso la línea que le indica el tamaño del repositorio.

Cuestiones relacionadas