Come pulire la cartella .git e ridurre lo spazio del repository

Nel caso in un repository git si stiano gestendo file di grandi dimensioni, come per esempio immagini e video, una loro rimozione in un successivo commit non aiuterà nella riduzione dello spazio occupato.

Siccome git è progettato con la finalità di tenere traccia della storia dei file caricati, questi, in caso di eliminazione non verranno completamente eliminati.

Nella seguente procedura vedremo quindi come eliminare completamente i file dal proprio repository.

Trovare i file più ingombranti nel repository

Utilizziamo il seguente comando per trovare e visualizzare in ordine di dimensione i 10 file che occupano più spazio nel repository. Dove eseguiamo il tail possiamo eventualmente modificare il numero di file che vogliamo elencare.

				
					git rev-list --objects --all | grep -f <(git verify-pack -v .git/objects/pack/*.idx| sort -k 3 -n | cut -f 1 -d " " | tail -10)
				
			

Pulire l'history dai file di grandi dimensione

Per ogni commit, il comando filter-branch riscrive l’history del repository con un filtro. Il seguente comando cancella le immagini (x. es .jpg, .png, .gif) che sono presenti nell’history.

				
					git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch "assets/*.jpg" "assets/*.png" "assets/*.gif"' --prune-empty --tag-name-filter cat -- --all
				
			

Questo comando forza (-f) l’applicazione del filtro (la stringa indicata dopo –index-filter), rimuove i commit vuoti (–prune-empty) riscritti dal filtro e sovrascrive il nome del tag (–tag-name-filter cat) nel nuovo commit per la lista dei commit object (– –all)

Ripulire il repository

Rimuoviamo i log e gli oggetti per i vecchi commit che non sono più referenziati nel commit che abbiamo riscritto.

				
					rm -Rf .git/refs/original
rm -Rf .git/logs/
git gc --aggressive --prune=now
				
			

Aggiornare il repository remoto

Non resta che eseguire il push delle modifiche al server remoto di git.

				
					git push origin --force --all
git push origin --force --tags
				
			

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Most Recent

Come ridurre la dimensione di un boltdb

Questo post parte da questa risposta ad una domanda posta sul repository ufficiale di boltdb. Nella domanda si chiede come ridurre la dimensione di un database

Come installare uno script Go su Ubuntu

Go è un linguaggio di programmazione nato in Google dalle mani di Robert Griesemer, Rob Pike e Ken Thompson. Sintatticamente è molto simile al C

Come trasferire chiamate tra interni su FreePBX

Molti telefoni hardware hanno già incorporato un pulsante che può essere utilizzato per il trasferimento delle chiamate tra interni, altri invece ne sono sprovvisti. Cosa