2010-05-21 3 views
34

Supongamos que en algún lugar de la web existe un repositorio público de git. Quiero clonarlo pero primero necesito estar seguro de cuál es su tamaño (cuántos objetos & kbytes les gusta en git count-objects)¿Es posible contar remotamente el objeto y el tamaño del repositorio de git?

¿Hay alguna manera de hacerlo?

+2

@Dogbert Puede averiguar el tamaño de un GitHub alojada por cortesía del repositorio a su API (ver este [SO pregunta] (http: // stackoverflow. com/questions/8646517/see-the-size-of-a-github-repo-before-cloning-it)). Aunque no he encontrado nada relacionado con el recuento de objetos. Hth. – nulltoken

Respuesta

16

Un pequeño kludge podría utilizar sería el siguiente:

mkdir repo-name 
cd repo-name 
git init 
git remote add origin <URL of remote> 
git fetch origin 

git fetch muestre la información a lo largo de estas líneas:

remote: Counting objects: 95815, done. 
remote: Compressing objects: 100% (25006/25006), done. 
remote: Total 95815 (delta 69568), reused 95445 (delta 69317) 
Receiving objects: 100% (95815/95815), 18.48 MiB | 16.84 MiB/s, done. 
... 

Los pasos en el extremo remoto suceden generalmente bastante rápido; es el paso de recepción que puede consumir mucho tiempo. En realidad, no muestra el tamaño total, pero ciertamente puede verlo por un segundo, y si ve "1% ... 23.75 GiB", sabe que tiene problemas y puede cancelarlo.

+5

¿Estás seguro de que esto es válido? Creo que el porcentaje representa la cantidad de objetos recibidos, no el tamaño de los datos. – jhabbott

+1

No dije que esto le diera ningún número exacto, solo que puede usarlo como una forma de saber si el repositorio es obscenamente grande. – Cascabel

+2

Si quisiera ir por esta ruta podría simplemente ejecutar 'git fetch --dry-run' y entonces no tendría que preocuparse de cancelar antes de la transferencia de datos. Pero ambos tienen razón, es un kludge imperfecto. –

1

No que yo sepa:
Git no es un servidor, no hay nada por defecto escuchando a una solicitud (a menos que se activa un gitweb, o una capa gitolite)
Y el comando "git remote ..." se refiere a la local copia (recuperada) de un repositorio remoto.

Así que a menos que obtenga algo, o clone --bare un repositorio remoto, no tendrá una idea de su tamaño.
Y eso no incluye el tamaño del directorio de trabajo, una vez desprotegido.

2

creo que hay un par de problemas con esta pregunta: git count-objects no representa verdaderamente el tamaño de un repositorio (incluso git count-object -v en realidad no); si está utilizando algo que no sea el transporte HTTP tonto, se creará un nuevo paquete para su clon cuando lo haga; y (como señaló VonC ) cualquier cosa que haga para analizar un repositorio remoto no tendrá en cuenta el tamaño de copia de trabajo .

Dicho esto, si están utilizando el transporte HTTP mudo (github, por ejemplo, no lo es), se podría escribir un script de shell que utiliza rizo para consultar los tamaños de todos los los objetos y paquetes. Eso podría acercarlo más, pero está haciendo más solicitudes http que tendrá que hacer nuevamente para hacer el clon.

Es posible averiguar qué git-fetch enviaría a través del cable (para un transporte inteligente http ) y enviar que para analizar los resultados, pero no es realmente una buena cosa que hacer. Básicamente, le está pidiendo al servidor de destino que empaquete los resultados que simplemente va a descargar y desechar, para que pueda descargarlos nuevamente para guardarlos.

Algo así como estos pasos se puede utilizar para este efecto:

url=https://github.com/gitster/git.git 
git ls-remote $url | 
    grep '[[:space:]]\(HEAD\|refs/heads/master\|refs/tags\)' | 
    grep -v '\^{}$' | awk '{print "0032want " $1}' > binarydata 
echo 00000009done >> binarydata 
curl -s -X POST --data-binary @binarydata \ 
    -H "Content-Type: application/x-git-upload-pack-request" \ 
    -H "Accept-Encoding: deflate, gzip" \ 
    -H "Accept: application/x-git-upload-pack-result" \ 
    -A "git/1.7.9" $url/git-upload-pack | wc -c 

Al final de todo esto, el servidor remoto se han empacado maestro/HEAD y todas las etiquetas para usted y usted ha descargado todo el archivo del paquete solo al para ver qué tan grande será cuando lo descargue durante su clonación.

Cuando finalmente un clon, la copia de trabajo se creará también, así que todo el directorio será más grande que estos comandos escupir, pero el archivo de paquete de general es la mayor parte de una copia de trabajo con cualquier historia significativa

12

Para el repositorio github, ahora ofrece API para verificar el tamaño del archivo. ¡Funciona!

Este enlace: see-the-size-of-a-github-repo-before-cloning-it dio la respuesta

Comando: (respuesta de @VMTrooper)

curl https://api.github.com/repos/$2/$3 | grep size 

Ejemplo:

curl https://api.github.com/repos/Marijnh/CodeMirror | grep size 
% Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 5005 100 5005 0  0 2656  0 0:00:01 0:00:01 --:--:-- 2779 
"size": 28589, 
3

no da el recuento de objetos, pero si use el navegador Google Chrome e instale este extension

Se añade el tamaño de recompra a la página principal:

GitHub Repo Size extension screenshot

Cuestiones relacionadas