2 min Devops

Git-fout maakte Microsoft-repository 35 keer groter dan nodig

Git-fout maakte Microsoft-repository 35 keer groter dan nodig

Toen de JavaScript-repository van Microsoft sneller groeide dan die van Office, was duidelijk dat er iets mee fout ging. Een Microsoft-engineer legt uit hoe de repo afslankte van 178GB naar 5GB.

De Git-repository in kwestie is een monorepo, ofwel een verzamelbak aan programmeercode voor allerlei projecten. In dit geval betrof het alle JavaScript-initiatieven van Microsoft. Dat zijn er nogal wat: Teams, Visual Studio Code, Office Online zijn er voorbeelden van.

Changelog-problemen

De wildgroei van de Git-repo is de laatste jaren enorm. Microsoft-engineer Jonathan Creamer legt uit dat zijn eerste installatie 2GB betrof, maar maanden later was dit al 4GB en recent dus 178GB. Ondanks gebruikelijke optimalisaties bleef de repo gigantisch.

De boosdoener: “name-hash collisions”. Met bestanden als changelog.md en changelog.json vond Git onterecht allerlei verschillen met elke commit, dat geleidelijk aan 173GB aan onnodige bloat toevoegde. De changelogs zaten echter in totaal verschillende packages. Het algoritme controleerde alleen de laatste 16 karakters van het pad, waardoor de package-verschillen niet werden bekeken.

Saillant detail: dit algoritme was toegevoegd aan Git door ene Linus Torvalds, maker van Git (en natuurlijk Linux). Een oplossing is overigens in aantocht.

Git-populariteit

Git populair noemen is een understatement. In een Stack Overflow-enquête gaf 94 procent van de ondervraagde ontwikkelaars aan Git te gebruiken als hun version control-systeem. De populariteit wordt ook als zodanig uitgesproken: volgens sommigen is Git zelfs de beste prestatie van Linus Torvalds, nog voorbij Linux. Voorganger SVN wordt door 5 procent gebruikt, mogelijk alleen door projecten die ouder zijn dan Git zelf, dat in 2005 ontstond.

Voor grote projecten is de nieuwe ontdekking mogelijk een prettige ontwikkeling, dat downloadformaten radicaal reduceert. Toch is de prestatiewinst niet zichtbaar voor kleine repo’s, die veel minder changelogs en dergelijke vaak voorkomende bestanden in verschillende packages bevatten.

Lees ook: Microsoft sust kritiek over Visual Studio Code-API’s