2012-03-05 9 views
13

Potrei davvero usare qualche aiuto qui.Git push - pacchetto suboptimale - esaurimento della memoria

Ho appena creato un nuovo repository nudo per fungere da target di produzione per le dev push. Ho anche la directory web funzionante sul server come un repository git. Il server sta eseguendo git 1.7.4.1 su centos5.5

Dopo aver creato il nuovo repository nella directory Web, ho eseguito un add Git. Ha rilevato qualcosa come 2300 & alcuni file dispari & oltre 230k inserzioni.

Ho eseguito il commit della nuova base di file aggiunta. Sono andato bene e pulito. Tuttavia, quando ho eseguito un mittente originale git push, continua a darmi questo (si noti che ho 8 CPU, quindi gli 8 thread. Doc dicono che è normale);

# 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' 

Ho provato le seguenti cose per risolvere questo, ma tutti producono gli stessi risultati;

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

anche provato una spinta forza, ma ha ottenuto la stessa cosa, solo con un errore di 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' 

Ho lavorato su questo per 2 giorni ormai e ho provato quasi tutto ciò che posso trovare su google e qui su SO.

Ho raggiunto il mio limite con il tentativo di risolvere il problema. Per favore, dimmi che qualcuno là fuori sa cosa si può fare per far funzionare questo lavoro?

+0

Per sicurezza, questo non ha nulla a che vedere con il 'postBuffer'? http://stackoverflow.com/questions/6842687/the-remote-end-hung-up-unexpectedly-while-git-cloning/6849424#6849424 – VonC

+0

Spiegare cosa intendi, VonC in quanto è un nuovo termine per me con rispetto a Git. – Skittles

+0

Mi chiedevo se 'git config - globale http.postBuffer 524288000' non sarebbe stato in grado di far funzionare la tua spinta. – VonC

risposta

14
  1. Può essere git è uno strumento suboptimale per la gestione di grandi quantità di grandi blob.
  2. È possibile disabilitare la compressione multi-threaded per risparmiare memoria: git config pack.threads 1 (in aggiunta alle altre opzioni di limitazione della memoria, come core.bigfilethreshold nei nuovi Git)
+1

Bene Vi ... l'idiota gira più lentamente di una melassa che corre lungo una pipa in un'estate artica, ma ha funzionato. Grazie! – Skittles

+0

Si può considerare di esternalizzare grandi cose da git repo (mentre si sta ancora eseguendo il versioning), o usando qualche altro approccio per l'attività. Git sta probabilmente cercando di trovare blocchi simili in tutti i tuoi dati. Prova a regolare l'opzione 'core.bigfilethreshold' (git> = v1.7.6) –

+0

Grazie ancora, Vi! Sfortunatamente, sto usando la v1.7.4.1. Ma lo terrò in cima ai miei articoli di conoscenza Git. – Skittles

3

Ho avuto lo stesso problema con un clone git. Il repo era 25GB. Ho usato un comando alternativo, per me è richiesto il controllo principale della sorgente,

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

dopo questo ho potuto impegnare e tirare come qualsiasi altro repository.

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

Questa è l'unica cosa che ha funzionato per me. Urgh, odio avere ancora a che fare con vecchi server condivisi. –

0

mi rendo conto che questo è un po 'tardi nel gioco, ma dal momento che alcuni dei sopra di me (grazie @Ashitakalax) ha aiutato, qui sono i miei due centesimi. Stesso problema di sopra (inflateInit: memoria esaurita) quando si spostano le modifiche da un'istanza di sviluppo di Wordpress a monte per testare, git si interrompe con la memoria esaurita e ciò è regolarmente dovuto alle modifiche nella directory ../uploads/ contenente i file di immagine.Tutto questo in un host condiviso senza accesso alla configurazione git globale in modo facciamo:

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

per registrare i cambiamenti

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

per spostare il grosso delle correzioni di immagine/cambia

2- in test: git add -A 

per monitorare il nuovo materiale sul lato di prova delle cose

3- in test: git fetch origin 

ora prendere il resto dalla repo

4- in test: git merge origin/master 

e, infine, si fondono ...

Il bit rsync alleggerisce il carico git e tutto è bene.

0

Niente di tutto questo mi ha aiutato risposte. Il mio problema era che il mio piccolo server ha 1 GB di RAM e nessun SWAP. Ho fatto sudo service apache2 stop & sudo service mysql stop + uccidere un processo inutilizzato da htop (dopotutto ottengo ~ 100mb di RAM) e git push corretto.