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

Cerca

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. I campi obbligatori sono contrassegnati *

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

Most Recent

Come aggiornare mailcow

In questo scenario viene illustrato come eseguire l’aggiornamento di un’istanza di mailcow dockerized utilizzando i tools in esso integrati. Aggiornamento automatico Nella directory di mailcow-dockerized

Partners