2011-10-07 15 views
7

Tengo bastante cantidad de archivos en el repositorio. Por lo tanto, a veces git se cuelga debido a la excepción de falta de memoria durante los cambios de rebase.git crash during rebase

E.g.

git checkout feature 
git rebase master 
(nasty out of memory exception) 
..... 

Así que una vez que llegué esa excepción, lo intenté de nuevo rebase

git rebase master 

Y me dijeron que la rama feature es hasta la fecha. Eso parece extraño, ya que la rebase terminó con excepción.

¿Hay alguna forma de evitar una excepción? Puede ser de alguna manera decirle a Git que use una cantidad de memoria menor. ¿Podría esta excepción ser la causa de la corrupción del repositorio? Si causa daños, ¿hay alguna forma segura de revertir los cambios realizados durante la rebase para indicar que fue antes de llamar al git rebase master?

+0

¿Qué dice la excepción? Puede ser importante. – Chris

+0

No puedo reproducirlo ahora. Pero es como seguir: 'blablabla out of memory, blablabla, malloc failed (could not allocate 100500 bytes)' –

Respuesta

2

Probablemente esté ejecutando esto en una VM o esté almacenando algunos archivos de gran tamaño. archivos rama de filtro a cabo grandes si se puede o subir la memoria:/

No hay mucho más que puedo agregar a menos que tenga más información ..

+1

¿Qué pasa con la corrupción del repositorio? –

+0

¿Qué quieres decir con 'archivos grandes'? ¿Git necesita almacenar todos los archivos del repositorio en ram para reubicar los cambios? –

+0

No estoy seguro. Pero puede estar intentando. ¿Qué tan grande es el archivo más grande que tienes en la historia? –

0

git rebase $BASE comienza haciendo git reset --hard $BASE

Si se bloquea debido a la falta de memoria después de eso, significa que se queda con yo su puntero de rama apuntando a $BASE en lugar de la confirmación a la que apuntaba antes.

Es por eso que están diciendo que es feature al día cuando git rebase master de nuevo, porque feature ya está apuntando a la misma comprometerse como master después de la caída de la memoria.

para restablecer su rama de nuevo a la original se comprometen que se encontraba antes, ejecute

git reset --hard [email protected]{1}`. 

O si lo ha hecho otro trabajo en la rama después del accidente, ejecute git reflog para encontrar cometer el original.

Ver también Undoing a git rebase


Después que ha recibido su rama de nuevo a la original cometer, puede intentar

git rebase -m master 

que se trate de una estrategia de rebase diferente que probablemente usa menos memoria si tiene grandes archivos binarios