Bitbucket: elimina la cartella dalla cronologia di Git

Esiste un limite rigido di 2 GB quando si ospita Git su Bitbucket : se viene superato, si ha solo accesso in sola lettura al repository. Per evitare ciò, è possibile, ad esempio, rimuovere retroattivamente cartelle o file di grandi dimensioni dai propri commit. Ma anche in altri casi (se i dati di accesso sono entrati nella cronologia o node_modules è tornato al master) devi manipolare retrospettivamente la cronologia di Git, contrariamente alla sua natura.


Bitbucket ha scritto un articolo dettagliato su questo stesso. Per eseguire l'intera operazione su un caso, creiamo prima un nuovo repository:

cronologia bitbucket pulita

Quindi cloniamo il repository in una cartella vuota sulla macchina locale:

6ab7686fc508ce87c52b10bb5d01ee51

Ora creiamo due sottocartelle con file di contenuto casuale:

6ab7686fc508ce87c52b10bb5d01ee51

Ora stiamo spingendo sul master:

6ab7686fc508ce87c52b10bb5d01ee51

Ora abbiamo quasi raggiunto il limite massimo di 2 GB su Bitbucket:

cronologia bitbucket pulita

Possiamo anche verificarlo localmente (vedi "size-pack"):

6ab7686fc508ce87c52b10bb5d01ee51

cronologia bitbucket pulita

Il compito ora è rimuovere retroattivamente "foo" dal repository per dimezzarne le dimensioni. Per fare ciò, prima modifichiamo l'attuale HEAD e scriviamo la cartella su gitignore:

6ab7686fc508ce87c52b10bb5d01ee51

Infine, rimuoviamo la cartella con l'aiuto di BFG Repo Cleaner (BFG richiede un JRE corrente sul sistema come requisito di sistema):

6ab7686fc508ce87c52b10bb5d01ee51

Ora possiamo vedere il risultato a livello locale:

6ab7686fc508ce87c52b10bb5d01ee51

cronologia bitbucket pulita

Tuttavia, la dimensione del repository non è cambiata su Bitbucket perché il garbage collector non è stato ancora eseguito da remoto e bitbucket non esegue un "git gc" a ogni push:

cronologia bitbucket pulita

Ciò è confermato anche dal supporto:

cronologia bitbucket pulita

Quindi è meglio inviare una richiesta direttamente a support@bitbucket.org per eseguire manualmente "git gc" nel repository. Dopo poco tempo, anche questo è stato fatto dal team di supporto:

cronologia bitbucket pulita

Se sposti "di recente" il repository su un altro computer, solo 0,9 GB finiranno sul disco. Se qualcuno ha la versione da 1.8 GB disponibile localmente, è sufficiente un "git pull" seguito da "git gc".

Indietro