2012-04-15 17 views
12

[Questa domanda è essenzialmente riapre git crash during rebase che non ha mai avuto una risposta]GIT Rebase Fatal su più 0.5GB Binary Files

Sto tentando di un rebase dal mio ramo 'secc' come:

$ 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? 

L'errore è legato al fatto che entrambe le diramazioni e il loro antenato comune hanno tre file .dat ognuno dei quali è di 0,5 GB.

Come posso fare un rebase in questa situazione?

Ulteriori informazioni:

  • A 'git merge principale' funziona bene.
  • L'aumento di .gitattributes con '* .dat merge = keepTheirs' non ha impedito l'esito fatale.
  • I file * .dat differiscono.
  • Sono disposto a rimuovere i file * .dat per rebase gli altri e quindi aggiungere il * .dat. Ma come?
  • sto usando git 1.7.9.4
+0

È possibile creare una patch per il ramo corrente, ricreare il ramo da cui si sta tentando di rebase e applicare la patch? – vcsjones

+0

sei la versione che controlla un file video o qualcosa del genere? – KurzedMetal

+0

Sono immagini di memoria flash utilizzate per stabilire un ambiente di prova. Ma non importa, ora sono sotto il controllo del codice sorgente e devono essere ridefiniti con tutto il resto sotto il controllo del codice sorgente. – GoZoner

risposta

1

Non si sa se la macchina è abbastanza grande fino a quando non riuscendo sul 'rebase git', ma a quel punto la directory è in uno stato munged. Durante il rebase è stato estratto un altro ramo (principale) in modo che le modifiche "secc" potessero essere applicate ad esso. Recuperare, e procedere con:

git checkout secc 

Dopo aver fallito il rebase, come hai notato che hai due opzioni:

  1. Se non è richiesta rebase, andare con 'git unione principale'
  2. avere una macchina più grande e Riprova 'git rebase principale'

non è una pratica opzione per ignorare i file 0.5GB, fare il rebase, e quindi ottenere quei file giga indietro.

1

Nei commenti hai detto che facendo lo stesso con un computer che contiene più, in questo caso 32 GB, la memoria ha risolto il problema. Sulla base di ciò, concluderei che hai avuto poca memoria disponibile per fare ciò sulla macchina con la quale l'hai provata per la prima volta.

+1

Quando un programma si blocca e lascia la directory di lavoro in uno stato cestinato (ma ripristinabile), dopo di che si può dire 'Oh, ho bisogno di una macchina più grande " - beh quella non è una soluzione – GoZoner

+0

Il problema sembra essere a) troppo poca memoria disponibile e b) git gestirlo in modo improprio a) possiamo fare qualcosa, b) è probabilmente qualcosa che dovrebbe essere segnalato agli sviluppatori Git – eis

+0

. .. a meno che, ovviamente, questo sia già stato risolto nell'ultima versione di Git. Tuttavia, anche se fallirebbe con garbo, avresti ancora poca memoria per fare questo. – eis

0

provare a mettere questi in .git/info/attributes:

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

che ti causare conflitti se unire i file cambiano, e si dovrà capire cosa fare con loro. controlla i gitattributes e rebase doc per altre strategie di fusione, non chiamerò nemmeno i pericolosi qui.

Non sono sicuro che sia l'unione effettiva che cerca di ottenere il funzionamento completo di core, ma sembra che valga la pena provare.