Estoy organizando un git repo en un host compartido. Mi informe necesariamente tiene un par de archivos muy grandes, y cada vez que trato de ejecutar "git gc" en el repositorio ahora, el proveedor de alojamiento compartido mata mi proceso por usar demasiada memoria. ¿Hay alguna manera de limitar la cantidad de memoria que git gc puede consumir? Mi esperanza es que pueda cambiar el uso de la memoria por velocidad y solo demore un poco más en hacer su trabajo.¿Hay alguna manera de limitar la cantidad de memoria que usa "git gc"?
Respuesta
Sí, echar un vistazo a la página de ayuda para git config
y observe el pack.*
opciones, específicamente pack.depth
, pack.window
, pack.windowMemory
y pack.deltaCacheSize
.
No es un tamaño totalmente exacto ya que git necesita asignar cada objeto a la memoria para que un objeto muy grande pueda causar una gran cantidad de memoria independientemente de la configuración de ventana y delta cache.
Puede tener mejor suerte empacando localmente y transfiriendo los archivos del paquete al lado remoto "manualmente", agregando un archivo .keep
para que el git remoto nunca intente volver a empaquetar todo.
Usted podría utilizar apagar el atributo delta para desactivar la compresión delta para sólo las manchas de los nombres de ruta:
En foo/.git/info/attributes
(o foo.git/info/attributes
si se trata de un repositorio desnudo) (ver la entrada de delta en gitattributes y ver gitignore para la sintaxis del patrón):
/large_file_dir/* -delta
*.psd -delta
/data/*.iso -delta
/some/big/file -delta
another/file/that/is/large -delta
Esto no afectará a los clones del repositorio. Para afectar a otros repositorios (es decir, clones), coloque los atributos en un archivo .gitattributes
en lugar de (o además de) el archivo info/attributes
.
Esta es la respuesta más útil cuando se trata de archivos de gran tamaño. Gracias. Tengo un repo de algunos PSD, y solía tomar gigabytes de memoria para hacer un git gc, ahora toma menos de 100MB de RAM. Guay. –
Utilicé las instrucciones de este link. Se sugirió la misma idea que Charles Baileys.
Una copia de los comandos está aquí:
git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"
Esto funcionó para mí en hostgator con cuenta de alojamiento compartido.
Gracias! Esto funciona para mí, pero creo que hay un error tipográfico en la segunda línea: no hay una opción SizeLimit; debería leer: git config --global pack.packSizeLimit "100m" – Max
Esto funcionó perfectamente. Si no funciona al principio, pruebe con un límite inferior en windowMemory y packSizeLimit. En mi caso, 25m fue el punto dulce. – jsapara
Cambié el nombre de la opción. El enlace original está roto, no estoy seguro de dónde apuntarlo. – phunehehe
El uso de la memoria de Git repack es: (pack.deltaCacheSize + pack.windowMemory) × pack.threads
. Los valores predeterminados respectivos son 256Mib, ilimitados, nproc.
La memoria caché delta no es útil: la mayor parte del tiempo se utiliza para calcular deltas en una ventana deslizante, la mayoría de las cuales se descartan; el almacenamiento en caché de los supervivientes para que puedan volver a utilizarse una vez (al escribir) no mejorará el tiempo de ejecución. Ese caché tampoco se comparte entre subprocesos.
De forma predeterminada, la memoria de la ventana está limitada a través de pack.window
(gc.aggressiveWindow
). Limitar el empaque de esa manera es una mala idea, porque el tamaño y la eficiencia del conjunto de trabajo variarán ampliamente. Lo mejor es elevar ambos a valores mucho más altos y confiar en pack.windowMemory
para limitar el tamaño de la ventana.
Finalmente, el enhebrado tiene la desventaja de dividir el conjunto de trabajo. Bajar pack.threads
y aumentar pack.windowMemory
para que el total permanezca igual debería mejorar el tiempo de ejecución.
reempaquetado tiene otros parámetros optimizables útiles (pack.depth
, pack.compression
, las opciones de mapa de bits), pero no afectan el uso de la memoria.
¿No parece la verdad completa? ¿Tiene una idea: http://stackoverflow.com/questions/42175296/git-gc-uses-a-lot-of-memory-even-i-limited-it – Alex
- 1. ¿Hay alguna manera de limitar la memoria, ghci puede tener?
- 2. ¿Hay alguna manera de ver cuánta memoria usa una variable?
- 3. ¿Hay alguna manera de establecer la cantidad de memoria disponible en el simulador de iPhone?
- 4. ¿Hay alguna manera de limitar las longitudes vline en ggplot2?
- 5. ¿Hay alguna manera de detectar de manera confiable la cantidad total de núcleos de CPU?
- 6. ¿Hay alguna manera de listar repositorios git en la terminal?
- 7. gc Git usando excesivo de memoria, incapaz de completar
- 8. ¿Hay alguna manera de configurar el repositorio de git para que rechace 'git push --force'?
- 9. ¿Hay alguna manera de saber qué algoritmo de GC utiliza actualmente la JVM?
- 10. ¿Hay alguna manera mejor que analizar/proc/self/maps para descubrir la protección de memoria?
- 11. ¿Hay alguna manera de que git cree un parche para la placa de revisión?
- 12. ¿Hay alguna manera de sincronizar repositorios GIT y Subversion?
- 13. ¿Hay alguna manera de bloquear una rama en GIT
- 14. Limitar la memoria de ImageMagick Usar
- 15. Verifica la cantidad de memoria amortiguada que usa la imagen en Java?
- 16. ¿Hay alguna manera de determinar la cantidad de RAM de video gratuita en Linux?
- 17. ¿Hay alguna manera de importar/exportar SourceGear Vault a Git
- 18. ¿Hay alguna forma de determinar la cantidad ideal de hilos?
- 19. ¿Hay alguna manera de estrangular la CPU/memoria de un proceso?
- 20. ¿Hay alguna manera de controlar la cantidad de subprocesos usados con pmap?
- 21. ¿Cómo se obtiene la cantidad de memoria que usa un programa?
- 22. ¿Hay alguna manera de hacer que git supere el tiempo de espera de http?
- 23. ¿Hay alguna manera de limitar el alcance de flotación y borrado de CSS?
- 24. ¿Hay alguna manera de "reiniciar" la JVM?
- 25. ¿Hay alguna manera de hacer que mi programa delphi espere a que se copien una gran cantidad de archivos?
- 26. ¿Hay alguna manera de que un servidor Git admita solicitudes de clientes svn?
- 27. Limitar memoria de Python VM
- 28. ¿Hay alguna manera de evitar recursiones innecesarias?
- 29. git gc en la máquina con cuota
- 30. limitar el uso de memoria de Node.js
postimum relacionado: http://stackoverflow.com/a/10293304/274502 – cregox
Sí, tenía un problema similar en Dreamhost (con el que está etiquetada esta pregunta). No hay tantos casos en los que se haya matado a 'git', pero' darcs' (otro VCS) siempre se mata, por lo que no se puede usar en http://Dreamhost.com –