2012-06-21 10 views
7

Al empujar a un servidor remoto consigo el error:git push: fatal: Fuera de memoria, malloc no

Counting objects: 58, done. 
Compressing objects: 100% (35/35), done. 
fatal: Out of memory, malloc failed (tried to allocate 595059947 bytes) 
error: pack-objects died of signal 13 
error: failed to push some refs to '[email protected]:development'" 

Creo que el problema es que accidentalmente Comitted algunos archivos de registro muy grandes. Pero posteriormente los eliminé (git rm logfile), pero el error permanece. Y no aparecen en "estado de git". ¿Cómo me recupero de esto?

+0

Ver [esto] (https://help.github.com/articles/remove-sensitive -datos); la sección sobre purgar datos del repositorio y usar el recolector de basura. – Shahbaz

+2

Si los eliminaste con 'git rm' pueden estar presentes en confirmaciones anteriores. ¿Tiene alguna objeción a reescribir su historial y eliminarlo por completo? ¿También te refieres a empujado accidentalmente o comprometido accidentalmente? –

+0

Quise decir comprometido no empujado (he editado la pregunta original). Tengo objeciones a la reescritura de la historia. Cualquier cosa que funcione – Rune

Respuesta

3

No podría decir por su comentario si se oponía a reescribir el historial, o no se oponía. Si no objeta, este comando borrará los archivos grandes de su historial.

Advertencia: esto es destructivo e irreversible. Haga una copia de seguridad de su repositorio primero. Si no le gusta el resultado, sólo tiene que restaurar la copia de seguridad:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch <file>' \ 
--prune-empty --tag-name-filter cat -- --all 

ese comando borrará <file> de la historia de su rama. Ejecútelo para cada archivo que le causa problemas.

0

he experimentado este error mientras se empuja a un git-repo alojado en un pi frambuesa. Uno de los archivos que intenté insertar es más grande que la memoria disponible (memoria + intercambio) en el servidor de git.

resuelto el problema mediante la creación temporal de un nuevo archivo de intercambio en el servidor git:

dd if=/dev/zero of=/media/store/swapfile bs=1024 count=655360

mkswap /media/store/swapfile

swapon /media/store/swapfile

comprobar que se ha añadido una nueva partición de intercambio ejecutando:

swapon, cat /proc/swaps o free

(prefiero no añadir el archivo de intercambio de /etc/fstab, por lo que el archivo de intercambio se ha ido después de un reinicio.)