2012-03-05 15 views
13

Realmente podría usar algo de ayuda aquí.Git push - paquete subóptimo - memoria

Acabo de crear un nuevo repositorio vacío para actuar como un objetivo de producción para dev push. También tengo el directorio web de trabajo en el servidor como un git repo. El servidor ejecuta git 1.7.4.1 en centos5.5

Después de crear el nuevo repositorio en el directorio web, realicé un git add. Se anotó algo así como 2300 & algunos archivos impares & más de inserciones de 230k.

Hice una confirmación de la base de datos recién agregada. Fue agradable y limpio. Cuando hice un master de origen de git push, sigue dándome esto (tenga en cuenta que tengo 8 CPU, de ahí los 8 hilos. Los documentos dicen que esto es normal);

# git push --mirror 
Counting objects: 2000, done. 
Delta compression using up to 8 threads. 
warning: suboptimal pack - out of memory 
fatal: inflateInit: out of memory (no message) 
error: failed to push some refs to '/home/ggadmin/gg-prod.git' 

He intentado lo siguiente para resolver esto, pero todos producen los mismos resultados;

git repack -adf --window-memory=100m 
           ^tried running this up to 1024m. Same result. 

Incluso probé un empuje de fuerza, pero obtuve lo mismo, solo con un error de malloc;

# git push -f origin master 
Counting objects: 2000, done. 
Delta compression using up to 8 threads. 
warning: suboptimal pack - out of memory 
fatal: Out of memory, malloc failed (tried to allocate 2340 bytes) 
error: failed to push some refs to '/home/ggadmin/gg-prod.git' 

He estado trabajando en esto durante 2 días y probado casi todo lo que puedo encontrar en Google y aquí en la SO.

He llegado al final de mi ingenio al tratar de solucionarlo. Por favor, dime que alguien sabe lo que se puede hacer para que esto funcione.

+0

Sólo para estar seguro, ¿esto no tiene nada que ver con el 'postBuffer'? http://stackoverflow.com/questions/6842687/the-remote-end-hung-up-unexpectedly-while-git-cloning/6849424#6849424 – VonC

+0

Por favor, explica lo que quieres decir, VonC ya que es un término nuevo para mí con respecto a Git. – Skittles

+0

Me preguntaba si 'git config --global http.postBuffer 524288000' no podría hacer que tu push funcione. – VonC

Respuesta

14
  1. May be git es una herramienta subóptima para la manipulación de grandes cantidades de grandes manchas.
  2. Se puede desactivar la compresión multi-hilo para ahorrar memoria: git config pack.threads 1 (además de otras opciones de memoria que limita, al igual que en la más reciente core.bigfilethreshold Git)
+1

Bueno Vi ... git está corriendo más lento que la melaza corriendo por una tubería en un verano ártico, pero funcionó. ¡Gracias! – Skittles

+0

Puede considerar la posibilidad de externalizar grandes cosas de git repo (mientras las versiona), o usar algún otro enfoque para la tarea. Git probablemente esté tratando de encontrar bloques similares en todos tus datos. Intenta ajustar la opción 'core.bigfilethreshold' (git> = v1.7.6) –

+0

¡Gracias de nuevo, Vi! Lamentablemente, estoy usando v1.7.4.1. Pero lo mantendré en la parte superior de mis elementos de conocimiento de Git. – Skittles

3

he tenido el mismo problema con un clon de git. El repositorio era de 25GB. He utilizado un comando alternativo, para mí es necesario el control de la raíz de la fuente,

rsync -avz -e ssh --progress [email protected]:repo/Directory destination/folder 

después de esto yo era capaz de comprometerse y tirar al igual que cualquier otro depósito.

6
git config --global pack.threads 1 
+1

Esto es lo único que funcionó para mí. Urgh, odio tener que lidiar con viejos servidores compartidos. –

0

me di cuenta que es un poco tarde en el juego, pero ya que algunos de los anteriores mí (gracias @Ashitakalax) ayudó, aquí están mis dos centavos. Mismo problema que el anterior (inflateInit: out of memory) al mover los cambios desde una instancia de Wordpress dev upstream a test, git aborta sin memoria y esto se debe regularmente a cambios en el directorio ../uploads/ que contiene archivos de imagen.Todo esto en un servidor compartido que no tienen acceso a la configuración de Git global, por lo que hacemos:

0- in repo: git commit -m "some relevant details" 

para registrar los cambios

1- rsync -av --progress repo/wp-content/uploads/ test/wp-content/uploads 

para mover la mayor parte de las correcciones de imagen/cambia

2- in test: git add -A 

para rastrear el nuevo material en el lado de prueba de las cosas

3- in test: git fetch origin 

ahora buscar el resto de la cesión temporal

4- in test: git merge origin/master 

y finalmente fusionarse ...

El bit rsync aligera la carga git y todo está bien.

0

Ninguna de estas respuestas me ayudaron. Mi problema es que mi pequeño servidor tiene 1 GB de RAM y ningún SWAP. Hice sudo service apache2 stop & sudo service mysql stop + matar a un proceso no utilizado de htop (después de todo eso me sale ~ 100mb de RAM) y git push correcto.