2012-04-15 10 views
12

[Esta pregunta está reabriendo esencialmente git crash during rebase la que nunca tuvo una respuesta]git rebase fatal en varios archivos binarios 0.5GB

Estoy intentando un rebase de mi rama 'SECC' como:

$ git rebase main 
First, rewinding head to replay your work on top of it... 
fatal: Out of memory, malloc failed (tried to allocate 553656577 bytes)   # about 0.5 GB 
$ git rebase --abort 
No rebase in progress? 

La falla está relacionada con el hecho de que ambas ramas y su ancestro común tienen tres archivos .dat cada uno de los cuales es de 0,5 GB.

¿Cómo puedo hacer una rebase en esta situación?

Otros detalles:

  • A 'git fusión principal' funciona muy bien.
  • Aumentando .gitattributes con '* .dat merge = keepTheirs' no previno el fatal.
  • Los archivos * .dat difieren.
  • Estoy dispuesto a eliminar los archivos * .dat para volver a establecer los otros y luego volver a agregar * .dat. ¿Pero cómo?
  • estoy usando git 1.7.9.4
+0

¿Puedes crear un parche para la rama actual, volver a crear la rama desde la que intentas volver a establecer la base y aplicar el parche? – vcsjones

+0

¿Eres tu versión controlando un archivo de video o algo así? – KurzedMetal

+0

Son imágenes de memoria flash utilizadas para establecer un entorno de prueba. Pero no importa, ahora están bajo el control de la fuente y deben volver a basarse con todo lo demás bajo el control de la fuente. – GoZoner

Respuesta

1

Usted no sabrá si su máquina es lo suficientemente grande, hasta su defecto en el 'git rebase' pero en ese momento su directorio está en un estado munged. Durante la rebase, se controló otra rama (principal) para que se pudieran aplicar los cambios 'secc'. Recuperarse, y enviando:

git checkout secc 

Después de haber fracasado en el rebase, como lo ha anotado que tienes dos opciones:

  1. Si no se requiere de rebase, ve con 'git merge principal'
  2. conseguir una máquina más grande y vuelva a intentar 'git rebase principal'

Usted no tiene una opción práctica para ignorar los archivos de 0.5GB, haga lo rebase, y luego conseguir esos archivos giga espalda.

1

En los comentarios, usted ha dicho que haciendo lo mismo con una computadora que contiene más, en este caso 32 GB, la memoria ha resuelto el problema. Basado en eso, concluiría que usted tiene muy poca memoria disponible para hacer esto en la máquina con la que lo intentó por primera vez.

+1

Cuando un programa falla y deja su directorio de trabajo en un estado de papelera (pero recuperable), después de lo cual puede decir 'Oh, necesito una máquina más grande' - Bueno, eso no es una solución. – GoZoner

+0

El problema parece ser a) muy poca memoria disponible yb) git manejarla incorrectamente. a) podemos hacer algo al respecto, b) es probablemente algo que se debe informar a los desarrolladores de Git – eis

+0

. ... a menos que, por supuesto, esto ya esté solucionado en la versión más reciente de Git. Sin embargo, incluso si fallara correctamente, todavía tendría muy poca memoria para hacer esto. – eis

0

trate de poner estos en .git/info/attributes:

# whatever gets them... 
yourfile binary -delta merge=binary 
*.yourext binary -delta merge=binary 

que va a causar conflictos de combinación si dichos archivos cambian, y usted tiene que averiguar qué hacer con ellos. revisa los gitattributes y el doc de rebase para otras estrategias de fusión, ni siquiera voy a nombrar los peligrosos aquí.

No estoy seguro de que sea la combinación real tratando de ejecutar todo el núcleo, pero parece que vale la pena intentarlo.