2010-11-18 12 views
10

Sto usando Git alla versione di una serie di file binari. Comprimono abbastanza bene, ma i miei repository centrali non sembrano comprimersi quando li spingo. Stanno mangiando una quantità decente della mia quota, quindi stavo cercando di capire se c'era un modo per forzare il repository remoto a fare un GC.Forza Remote Repo per comprimere (GC) con Git

È possibile? Sto lavorando su Project Locker quindi non credo di avere accesso SSH per entrare e GC il repository me stesso. Qualche idea? Grazie.

+0

Avete accesso al gitconfig del telecomando? – Cascabel

risposta

8

Se non è possibile eseguire autonomamente lo git gc, è necessario eseguirlo automaticamente. Allora non avresti il ​​pieno controllo su di esso, ma dovresti almeno riuscire a farlo funzionare.

git gc --auto viene eseguito da diversi comandi; quello rilevante qui è receive-pack, che viene eseguito sul telecomando per ricevere un pacchetto come parte di un push. gc --auto esegue il repack solo quando ci sono abbastanza oggetti liberi; il cutoff è determinato dal parametro config gc.auto e il valore predefinito è 6700.

Se si ha accesso al gitconfig del telecomando, è possibile impostare temporaneamente tale limite su 1. Ci dovrebbe essere sicuramente almeno 1 oggetto sciolto nel repository, in modo che dovrebbe causare gc --auto a fare la sua cosa la prossima volta che si preme.

Se non si ha accesso al gitconfig del telecomando, tutto ciò che posso pensare è creare artificialmente un mucchio di oggetti liberi. È possibile farlo creando un ramo, impegnando una serie di piccoli file (con contenuto diverso), spingendo il ramo sul telecomando, quindi eliminando il ramo dal telecomando. (Importante per variare il contenuto, o useranno lo stesso blob.) Risciacqua e ripeti.

+0

Posso provare a realizzare una piccola app che estrae 7000 file di testo. Non credo di avere accesso alla configurazione. Ti farò sapere come va, grazie! – jocull

+2

@jocull: 'seq 1 7000 | mentre leggi n; echo $ n> $ n.txt' – Cascabel

+0

Che cos'è, uno script di shell? Ad ogni modo, ho appena fatto qualcosa di veramente veloce in Qt e spingo su tutti gli oggetti liberi. Non sembrava fare la differenza nel mio uso dello spazio. Dovrò solo provare a contattare ProjectLocker e vedere cosa succede. Grazie per l'aiuto di tutti. – jocull

1

Modulo git-gcman page:

Alcuni comandi git possono eseguire automaticamente git gc; vedere la bandiera --auto qui sotto per i dettagli.

E ancora:

--auto

Con questa opzione, i controlli git gc se sia necessario alcun servizio di pulizia; in caso contrario, esce senza eseguire alcun lavoro. Alcuni comandi git eseguono git gc --auto dopo aver eseguito operazioni che potrebbero creare molti oggetti liberi.

La pulizia è necessaria se ci sono troppi oggetti sfusi o troppi pacchetti nel repository. Se il numero di oggetti mobili supera il valore della variabile di configurazione gc.auto, tutti gli oggetti liberi vengono combinati in un singolo pacchetto usando git repack -d -l. L'impostazione del valore di gc.auto su 0 disabilita il riempimento automatico di oggetti liberi.

Se il numero di pacchetti supera il valore di gc.autopacklimit, i pacchetti esistenti (ad eccezione di quelli contrassegnati con un file .keep) vengono consolidati in un singolo pacchetto utilizzando l'opzione -A di git repack. Impostando gc.autopacklimit su 0 disabilita il consolidamento automatico dei pacchetti.

E alla fine: comando di

Il GC git --auto eseguirà il gancio pre-auto-gc. Vedi githooks (5) per maggiori informazioni.

2

Questo è davvero un problema che devono risolvere sulla loro fine. Possono farlo con un hook post-receive o con un cron job o qualcosa di simile, ma se si suppone che mantengano i tuoi repository, questo è parte di esso per numerose ragioni.

+1

Sono tendenzialmente d'accordo, anche se a volte non si può aspettare che altre persone risolvano i loro problemi. Potrebbe anche essere che eseguono 'gc' una quantità decente, ma i file binari stanno facendo gonfiare le cose più velocemente del solito con il contenuto del testo. – Cascabel

+0

Se non fanno GC, allora mi vendono più spazio. È quasi logico che non provengano da un POV aziendale. – jocull