2011-08-18 12 views
30

Ho un repository pieno di file zip, la ricompressione di questi file sarà una perdita di tempo.git pull senza comprimere in remoto oggetti

Ho cercato di impostare core.compression = 0 sul telecomando e la copia locale senza successo

git config core.compression 0 
git config core.loosecompression 0 

git pull ancora fare

remote: Counting objects: 23, done. 
remote: Compressing objects: ... 
+1

Avete misurato la differenza di prestazioni? Non mi preoccuperei del tempo impiegato per comprimere i dati già compressi; le reti sono probabilmente molto più lente della tua CPU. –

risposta

43

Il problema di tempo che ho avuto è stato causato dalla compressione delta.

La soluzione per me è stato

echo '*.zip -delta' > .gitattributes 
git gc 

citerò questo eccellente risposta da http://lists-archives.org/git/719515-serious-performance-issues-with-images-audio-files-and-other-non-code-data.html

Git fa spendere un bel po 'di tempo in zlib per alcuni carichi di lavoro, ma non dovrebbe creare problemi nell'ordine dei minuti.

Per spingere e tirare, probabilmente stai vedendo la compressione delta, che può essere lenta per file di grandi dimensioni

core.compression 0 # sembrava non funzionare.

Che dovrebbe disabilitare la compressione zlib di oggetti e oggetti liberi all'interno di file pack. Può risparmiare un po 'di tempo per gli oggetti che non saranno compressi , ma perderà i vantaggi della dimensione per qualsiasi file di testo.

Ma non disattiverà la compressione delta, che è ciò che la fase "comprime ..." durante il push and pull. E che è molto più probabilmente la causa della lentezza.

pack.window 0

Si imposta il numero di altri oggetti git prenderà in considerazione quando si fa delta compressione. Impostarlo basso dovrebbe migliorare i tempi di push/pull. Ma con lo perderai il vantaggio sostanziale della compressione delta dei tuoi file non immagine (e dei meta oggetti di git). Quindi l'opzione "-delta" sopra per file specifici è una soluzione molto migliore.

echo '* .jpg -delta'> .gitattributes

Inoltre, considera reimballaggio il repository, che genererà un packfile che verrà riutilizzata durante push e pull.

Si noti che le impostazioni devono essere effettuate sul repository che si sta recuperando/tirando da, non quello che stai cercando.

+7

suggerisco di usare ">>" poiché questo sovrascriverà qualsiasi altra cosa che potresti già avere nel file '.gitattributes':' echo '* .zip -delta' >> .gitattributes' – scottgwald

7

I compressing object mezzi di linea è il lavoro pack. Questo include diffondere alberi e cose. Non è "comprimente" nel senso di core.compression.

+1

ok, quindi come faccio a impedire a git pull di eseguire il lavoro di imballaggio? – hdorio

+4

@Doud Non lo fai. Git fa le valigie. Questo è un comportamento buono e desiderabile. – meagar

+0

@Doud come posso spostare la mia casa senza imballaggio? –