2010-11-18 8 views
10

Estoy usando Git para versionar una serie de archivos binarios. Se comprimen bastante bien, pero mis repositorios centrales no parecen estar comprimidos cuando les presiono. Están consumiendo una cantidad decente de mi cuota, así que estaba buscando para ver si había una manera de obligar al repositorio remoto a hacer un GC.Forzar Remote Repo para comprimir (GC) con Git

¿Esto es posible? Estoy trabajando en Project Locker, así que no creo que tenga acceso SSH para entrar y GC el informe yo mismo. ¿Algunas ideas? Gracias.

+0

¿Tiene acceso al control remoto gitconfig? – Cascabel

Respuesta

8

Si no puede ejecutar git gc usted mismo, tendrá que engañarlo para que se ejecute automáticamente. Entonces no tendrás el control total sobre él, pero al menos deberías poder ejecutarlo.

git gc --auto es ejecutado por varios comandos; el relevante aquí es el paquete de recepción, que se ejecuta en el control remoto para recibir un paquete como parte de un empuje. gc --auto solo se vuelve a embalar cuando hay suficientes objetos sueltos; el valor de corte está determinado por el parámetro de configuración gc.auto y el valor predeterminado es 6700.

Si tiene acceso al gitconfig del control remoto, puede establecer ese límite en 1 temporalmente. Definitivamente debe haber al menos 1 objeto suelto en el repositorio, por lo que debería hacer que gc --auto haga lo suyo la próxima vez que presione.

Si no tiene acceso al gitconfig del control remoto, todo lo que puedo hacer es crear artificialmente un grupo de objetos sueltos. Puede hacerlo creando una bifurcación, comprometiendo un grupo de archivos pequeños (con contenido diferente), empujando la bifurcación hacia el control remoto y luego eliminando la bifurcación del control remoto. (Importante para variar el contenido, o simplemente usarán los mismos blobs.) Enjuague y repita.

+0

Puedo intentar hacer una pequeña aplicación que bombea aproximadamente 7000 archivos de texto. No creo que tenga acceso a la configuración. Te dejaré saber cómo va, ¡gracias! – jocull

+2

@jocull: 'seq 1 7000 | mientras lee n; echo $ n> $ n.txt' – Cascabel

+0

¿Qué es eso, un script de shell? De todos modos, acabo de hacer algo realmente rápido en Qt y empujo hacia arriba todos los objetos sueltos. No pareció hacer una diferencia en mi uso del espacio. Tendré que intentar contactar a ProjectLocker y ver qué pasa. Gracias por la ayuda de todos. – jocull

1

Formulario git-gcman page:

Algunos comandos git pueden ejecutar automáticamente git gc; vea el indicador --auto a continuación para más detalles.

Y más adelante:

--auto

Con esta opción, los cheques git gc si se requiere ninguna limpieza; si no, sale sin realizar ningún trabajo. Algunos comandos de git ejecutan git gc --auto después de realizar operaciones que podrían crear muchos objetos sueltos.

Se requiere limpieza si hay demasiados objetos sueltos o demasiados paquetes en el repositorio. Si la cantidad de objetos sueltos excede el valor de la variable de configuración gc.auto, todos los objetos sueltos se combinan en un único paquete usando git repack -d -l. Establecer el valor de gc.auto en 0 desactiva el empaque automático de objetos sueltos.

Si el número de paquetes supera el valor de gc.autopacklimit, los paquetes existentes (excepto los marcados con un archivo .keep) se consolidan en un único paquete utilizando la opción -A de git repack. Establecer gc.autopacklimit a 0 desactiva la consolidación automática de paquetes.

Y al final: comando

El git gc --auto ejecutará el pre-auto-gc gancho. Ver githooks (5) para más información.

2

Eso es realmente un problema que deben resolver por su parte. Pueden hacerlo con un gancho post-recepción o un trabajo cron o algo similar, pero si se supone que deben mantener sus repositorios, eso es parte de eso por varias razones.

+1

Tiendo a estar de acuerdo, aunque a veces no puedes esperar a que otras personas resuelvan sus problemas. También podría ser que ejecuten 'gc' una cantidad decente, pero los archivos binarios están causando que las cosas se llenen de contenido más rápido de lo normal con el contenido de texto. – Cascabel

+0

Si no tienen GC, entonces me venden más espacio. Casi tiene sentido para ellos no hacerlo desde un punto de vista comercial. – jocull