/ / Compatto repository rimuovendo i vecchi commit - git

Repository compatto rimuovendo i vecchi commit - git

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 № 1

Sfortunatamente, 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.