Bitbucket: map verwijderen uit Git-geschiedenis

Bij het hosten van Git op Bitbucket, is er een harde limiet van 2 GB - als dit wordt overschreden, heb je alleen-lezen toegang tot de repository. Om dit te voorkomen kun je bijvoorbeeld met terugwerkende kracht grote mappen of bestanden uit je commits verwijderen. Maar ook in andere gevallen (als toegangsgegevens in de geschiedenis zijn gekomen of node_modules zijn teruggegleden naar de master), moet je de geschiedenis van Git achteraf manipuleren, in tegenstelling tot zijn aard.


Bitbucket heeft hier zelf een uitgebreid artikel over geschreven. Om de hele zaak door te nemen, maken we eerst een nieuwe repository:

bitbucket geschiedenis schoon

Vervolgens klonen we de repository naar een lege map op de lokale computer:

6ab7686fc508ce87c52b10bb5d01ee51

Nu maken we twee submappen met bestanden met willekeurige inhoud:

6ab7686fc508ce87c52b10bb5d01ee51

We gaan nu door met meester:

6ab7686fc508ce87c52b10bb5d01ee51

Nu hebben we bijna de harde limiet van 2 GB op Bitbucket bereikt:

bitbucket geschiedenis schoon

We kunnen dit ook lokaal controleren (zie "size-pack"):

6ab7686fc508ce87c52b10bb5d01ee51

bitbucket geschiedenis schoon

De taak is nu om met terugwerkende kracht "foo" uit de repository te verwijderen om de grootte te halveren. Om dit te doen, bewerken we eerst de huidige HEAD en schrijven we de map naar gitignore:

6ab7686fc508ce87c52b10bb5d01ee51

Ten slotte verwijderen we de map met behulp van de BFG Repo Cleaner (BFG vereist een actuele JRE op het systeem als systeemvereiste):

6ab7686fc508ce87c52b10bb5d01ee51

We kunnen het resultaat nu lokaal zien:

6ab7686fc508ce87c52b10bb5d01ee51

bitbucket geschiedenis schoon

De grootte van de repository is echter niet veranderd op Bitbucket omdat de garbage collector nog niet op afstand is uitgevoerd en bitbucket niet bij elke push een "git gc" uitvoert:

bitbucket geschiedenis schoon

Dit wordt ook bevestigd door de steun:

bitbucket geschiedenis schoon

Het is dus het beste om rechtstreeks een verzoek te sturen naar support@bitbucket.org om "git gc" handmatig in de repository uit te voeren. Na korte tijd werd dit ook gedaan door het supportteam:

bitbucket geschiedenis schoon

Als je de repository "vers" naar een andere computer verplaatst, komt er slechts 0.9 GB op de schijf terecht. Als iemand de 1.8 GB-versie lokaal beschikbaar heeft, is een "git pull" gevolgd door "git gc" voldoende.

Terug