Ridurre le dimensioni del repository git


290

Ho provato a cercare un buon tutorial per ridurre le dimensioni del repository, ma non ne ho trovato nessuno. Come posso ridurre le dimensioni del mio repository ... è di circa 10 MB, ma il fatto è che Heroku mi consente solo 50 MB e non ho quasi finito di sviluppare la mia app.

Ho già aggiunto i soliti sospetti (log, vendor, doc etc) a .gitignore. Anche se di recente ho aggiunto .gitignore.

Eventuali suggerimenti?


1
L'ho appena fatto e lo ha portato a 2,2 mb ... grazie mille! Anche se questo non sembra ridurre le dimensioni del repository su Heroku..hmm
inviato il

11
Spingilo usando --force. Sovrascriverà il contenuto anche se non ci sono stati cambiamenti (nessun nuovo commit, ecc.)
Marcin Gil,

1
@MarcinGil - Di seguito, VonC afferma che è necessario accedere al server per pulire il server remoto (se lo sto analizzando correttamente).
1616

1
Solo un commento per aiutare gli altri lettori se non sanno cosa aggiungere al .gitignore, c'è un buon servizio su gitignore.io che ti aiuterà a creare un buon .gitignorebasato sul tuo ambiente di sviluppo.
Blairg23,

Risposte:


351

git gc --aggressiveè un modo per forzare il processo di prugna (per essere sicuri:) git gc --aggressive --prune=now. Hai altri comandi per pulire anche il repository. Non dimenticare, tuttavia, a volte git gcda solo può aumentare le dimensioni del repository !

Può anche essere usato dopo un filter-branch, per contrassegnare alcune directory da rimuovere dalla storia (con un ulteriore guadagno di spazio); vedi qui . Ma ciò significa che nessuno sta tirando dal tuo repository pubblico. filter-branchpuò mantenere i riferimenti di backup in.git/refs/original modo che anche la directory possa essere pulita.

Infine, come menzionato in questo commento e questa domanda ; la pulizia del reflog può aiutare:

git reflog expire --all --expire=now
git gc --prune=now --aggressive

Una soluzione ancora più completa, e forse pericolosa, è quella di rimuovere oggetti inutilizzati da un repository git


In un altro scenario, puoi anche stackoverflow.com/questions/1029969/...
VonC

1
Nota per sé: non dimenticate filiali remote: stackoverflow.com/questions/11255802/...
VonC

1
Nota per sé: non dimenticare i tag remoti
saiyancoder

1
Oltre ai riferimenti remoti, il reflog è un'altra cosa che può causare la conservazione dei riferimenti che si sta tentando di rimuovere. stackoverflow.com/q/27489761/1072626
vossad01

1
@jww Confermo che si tratta di un'operazione puramente locale. Non influisce sulle dimensioni del repository remoto. Avresti bisogno di un accesso diretto al server di quel repository remoto per fare lo stesso.
VonC,

94

Grazie per le tue risposte Ecco cosa ho fatto:

git gc
git gc --aggressive
git prune

Sembrava aver fatto il trucco. Ho iniziato con circa 10,5 MB e ora è poco più di 980 KB.


8
pruneè sempre gestito da gc(con impostazione predefinita 2 settimane fa).
Cas

117
Puoi eseguire tutte e 3 le git gc --aggressive --prune=now
potature

1
Ma, quando cancello il repository e lo clono di nuovo, la dimensione è ancora grande. Come lo gestisci?
Cwtuan,

2

Nel mio caso, ho inviato diversi file di grandi dimensioni (> 100 Mb) e poi ho proceduto alla loro rimozione. Ma erano ancora nella storia del mio repository, quindi ho dovuto rimuoverli anche da esso.

Qual è stato il trucco:

bfg -b 100M  # To remove all blobs from history, whose size is superior to 100Mb
git reflog expire --expire=now --all
git gc --prune=now --aggressive

Quindi, devi spingere la forza sul tuo ramo:

git push origin <your_branch_name> --force

bfg è uno strumento che può essere installato su Linux e macOS usando brew:

brew install bfg
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.