bundle-uri ist eine neue Git-Funktion, die zwischengespeicherte Dateien herunterlädt, um Projektdaten vorab bereitzustellen und danach den aufwendigen Fetch-Prozess mit dem Server zu reduzieren
- Normalerweise lädt der Befehl
git clone die benötigten Daten nach einem Aushandlungsprozess mit dem Server herunter → das kann ineffizient sein
bundle-uri holt die zwischengespeicherten Anfangsdaten von einem CDN und aktualisiert anschließend nur noch den neuesten Stand vom Server → kann Zeit sparen
Wird das Klonen schneller?
Ja? - Es kann schneller sein
- Mit der lokalen Dateivariante wird das Klonen sehr schnell
- Auf einem in einer VM eingehängten Dateisystem oder mit Bundle-Dateien aus einem Cloud-Cache kann die Synchronisierung schneller erfolgen
Nein? - Es kann langsamer sein
- Dasselbe Datenmaterial über ein CDN zu beziehen klang schneller, war in der Praxis aber sogar langsamer
- Versuchsergebnis: Ein Klon mit Bundle war langsamer als ein normaler Klon
- Normaler Klon: 2 Minuten 36 Sekunden
- Klon mit Bundle: 3 Minuten 20 Sekunden
- Es trat das Problem auf, dass Objekte, die bereits über das Bundle geladen wurden, erneut heruntergeladen wurden
Vielleicht? - Das kann sein
- Das Problem entstand, weil Git aus der Bundle-Datei nur
refs/heads (Branch-Referenzen) liest
- Die übrigen Referenzen werden ignoriert, weshalb zusätzliche Daten vom Server heruntergeladen werden
- Wenn man den Git-Code so anpasst, dass alle Referenzen kopiert werden, verbessert sich die Klon-Geschwindigkeit
- Klonzeit nach der Änderung: 2 Minuten 19 Sekunden (schneller als die bisherigen 2 Minuten 36 Sekunden)
- Zusätzlich heruntergeladene Objekte: 43.877 (etwa 1 % des Gesamtbestands)
Änderungsmethode und Einspielen des Patches
- Im Git-Code
bundle-uri.c wurde der Teil geändert, der Referenzen außer refs/heads ignoriert
- Nach der Änderung werden alle Referenzen kopiert → die Klon-Geschwindigkeit verbessert sich
- Diese Änderung war ein minimaler Patch mit einer Änderung von 6 Zeichen
Sollte man diese Funktion verwenden?
Möglicherweise - Könnte vermutlich helfen
- Auf Plattformen wie GitHub und GitLab hat das den großen Vorteil, die CPU-Last auf dem Server zu senken
- Der Server muss Packfiles nicht direkt berechnen, da dies über das CDN erfolgen kann → spart Server-Ressourcen
- Auch für einzelne Nutzer kann es in folgenden Fällen nützlich sein:
- Wenn in einem internen Git-Server wiederholt große Klonvorgänge nötig sind
- Wenn in CI/CD-Systemen wiederholt vollständige Klons erforderlich sind
Realistisch gesehen wird es wahrscheinlich erzwungen
- Im aktuellen Git-Protokoll kann der Server dem Client eine Bundle-URL bereitstellen
- Wenn der Server die URL einer Bundle-Datei bereitstellt, lädt der Client sie automatisch herunter und synchronisiert anschließend weiter
- Wenn diese Funktion bei GitHub usw. aktiviert wird, haben Nutzer keine Wahlmöglichkeit
Fazit
- Mit Bundle-Dateien kann das Klonen schneller werden, durch Gits Verarbeitungsweise kann es anfangs aber sogar langsamer sein
- Wenn man den Git-Code anpasst und die Verarbeitung von Referenzen verbessert, steigt die Klon-Geschwindigkeit
- Wenn GitHub, GitLab usw. diese Funktion künftig einführen, ist es sehr wahrscheinlich, dass sie auf Client-Seite automatisch verwendet wird
Noch keine Kommentare.