Esiste un modo per ridurre le dimensioni del repository rimuovendo la copia locale dei dati sui vecchi commit?
Simile a come git clone --depth 5
produce un piccolo clone locale con solo dati di commit recenti.
Il repository contiene gigabyte di asset di gioco che sono stati sovrascritti più volte in passato.
modificare: Non voglio solo cancellare la storia passata; voglio che la storia rimanga coerente con il telecomando, ma non voglio che i vecchi commit siano archiviati e disponibili localmente.
risposte:
7 per risposta № 1Sfortunatamente, NON è possibile mantenere solo gli impegni più recenti nella storia e pienamente utilizzabile repository. La copia superficiale NON è completamente utilizzabile perché non può essere impegnata.
In altre parole, a causa del modo in cui git conserva i dati nell'archivio oggetti, non hai molte opzioni oltre a riscrivere la cronologia da zero.
Probabilmente l'approccio più semplice è quello di creare una copia di tutti i file degli asset di gioco correnti da qualche parte al di fuori del repository git, quindi utilizzare git filter-branch
come descritto qui per rimuovere le risorse dalla cronologia, come mai prima d'oraesistito. Infine, copia nuovamente le risorse nella posizione corretta e impegnale nuovamente. Ciò riscriverà la tua cronologia in modo tale che le risorse di gioco appaiano solo nell'ultimo commit.
Tuttavia, non recupererà ancora spazio su disco fino a quando non lo fai:
git reflog expire --expire=now --all
git gc --prune=now
3 per risposta № 2
git gc --prune=<date>
dovrebbe fare quello che vuoi. Dai un'occhiata alla documentazione: https://www.kernel.org/pub/software/scm/git/docs/git-gc.html
Update1: Ti consiglio di leggere questo post sul blog git gc
anche: http://gitfu.wordpress.com/2008/04/02/git-gc-cleaning-up-after-yourself/
Update2: @mvp ha ragione, dopo una profonda ricerca git gc
rimuoverà solo oggetti non tracciati. Per rimuovere gli oggetti, utilizzare una delle soluzioni git filter-branch
. Ti consiglio di leggere questo argomento rimozione di oggetti e il git filter-branch documentazione. Grazie per l'heads up @mvp.