Git 2.47 veröffentlicht mit neuen Funktionen und Verbesserungen
Das Git-Projekt hat Git 2.47 veröffentlicht, vollgepackt mit neuen Funktionen, Leistungsverbesserungen und Fehlerbehebungen. Diese Version führt mehrere bemerkenswerte Änderungen ein, darunter inkrementelle Multi-Pack-Indizes, verbesserte Zweig-Identifikation mit 'for-each-ref', eine formale Plattformunterstützungspolitik und erweiterten Unit-Test-Abdeckungsgrad.
Inkrementelle Multi-Pack-Indizes: Leistungssteigerung für große Repositories
Git 2.47 führt eine neue experimentelle Funktion ein: inkrementelle Multi-Pack-Indexes. Diese Funktion behebt Leistungsengpässe, die mit Repositories verbunden sind, die zahlreiche Packfiles enthalten.
Die Herausforderung verstehen
- Git speichert Objekte (Blobs, Bäume, Commits, Tags) auf zwei Arten: locker (Einzeldateien) oder gepackt (mehrere Objekte in einer einzelnen Packdatei).
- Packfiles bieten Vorteile wie eine bessere Cache-Lokalität und Delta-Kompression, was zu kleineren Repository-Größen führt.
- Wenn jedoch die Anzahl der Packdateien wächst, werden Objektabfragen langsamer, da Git durchsuchen muss, jede Packdatei zu durchsuchen.
- Umpacken (Zusammenführen von Packdateien) verbessert die Suchzeiten, kann aber bei großen Repositories ressourcenintensiv sein.
- Multi-Pack-Indizes (MIDX) wurden in Git 2.21 eingeführt, um die Objektsuche über mehrere Packdateien zu beschleunigen, indem sie als Karte zwischen Objekten und deren Speicherort innerhalb der Packdateien fungieren.
- Das Erstellen und Aktualisieren von MIDXs kann jedoch auch zeitaufwendig für große Repositories sein.
Die inkrementelle MIDX-Lösung
Inkrementelle Multi-Pack-Indizes zielen darauf ab, MIDX-Aktualisierungen zu optimieren, indem sie die Speicherung mehrerer MIDXs in einer Kette von Schichten ermöglichen:
- Jede Schicht enthält Objekte, die sich von den vorherigen Schichten unterscheiden, was schnellere Aktualisierungen durch Anhängen ermöglicht.
- Das bedeutet, dass Updates Zeit in Anspruch nehmen, die proportional zu den hinzugefügten neuen Objekten ist, nicht zur gesamten MIDX-Größe.
- Obwohl in Git 2.47 noch experimentell, wird erwartet, dass die inkrementelle MIDX-Unterstützung die Skalierbarkeit großer Repositories verbessert.
Verwendung von inkrementellen MIDXs
Sie können diese experimentelle Funktion ausprobieren, indem Sie Folgendes ausführen:
git multi-pack-index write --incrementalDieser Befehl fügt neue Packs zum bestehenden MIDX Ihres Repositories hinzu.
Schnelles Finden von Basisbranches mit 'for-each-ref'
Die Bestimmung des Basis-Branches eines Commits kann schwierig sein. Git 2.47 vereinfacht dies mit einem neuen Atom für die for-each-ref-Option --format.
Das Problem
- Die Identifizierung des Basis-Branches eines Commits umfasst oft das Auffinden des Branches mit den wenigsten eindeutigen First-Parent-Commits, die zu diesem Commit führen.
- Dies spiegelt den dem betreffenden Commit nächstgelegenen primären Entwicklungsweg wider.
- Allerdings liefern vorhandene Werkzeuge wie 'git rev-list' diese Information nicht direkt.
Die Lösung: '%(is-base:)' Atom
- Das neue '%(is-base:)' Atom innerhalb von
for-each-ref --formathilft dabei, den wahrscheinlichsten Basis-Branch für einen bestimmten Commit zu bestimmen.
Beispielverwendung
git for-each-ref --format='%(refname) %(objectname) %(upstream:remoteref)' refs/headsDieser Befehl iteriert durch Branch-Heads, zeigt deren Namen, Commit-Hashes und ob sie wahrscheinlich Basis-Branches für den durch "COMMIT-HASH" angegebenen Commit sind.
Formelle Plattformunterstützungspolitik
Git 2.47 führt eine formale Plattformunterstützungspolitik ein, um Richtlinien für unterstützte Plattformen und deren Wartung bereitzustellen.
Hauptanforderungen
- Plattformen müssen C99 oder C11 unterstützen, sich auf stabile/langfristig unterstützte Abhängigkeiten verlassen und aktive Sicherheitsunterstützung haben.
- Diskussionen über die mögliche Einbeziehung von Rust als Abhängigkeit laufen weiterhin.
Vorteile
- Diese Richtlinie gewährleistet eine konsistente Kompatibilität und Wartbarkeit über verschiedene Systeme und Architekturen hinweg.
Erweiterte Unit-Test-Abdeckung
Git 2.47 verzeichnet einen erheblichen Anstieg der Unit-Test-Abdeckung, was die Codequalität und Zuverlässigkeit verbessert.
Bemerkenswerte Verbesserungen
- Reftable-Backend: Unit-Tests wurden von einem benutzerdefinierten Framework auf das Standard-Framework von Git migriert, was die Integration verbessert.
- Hashmap-API, OID-Array, URL-Übereinstimmungsnormalisierung: Konvertierung von Shell-basierten Integrationstests zu Unit-Tests, die mehr Detailgenauigkeit und Robustheit bieten.
- Clar Framework-Adoption: Die Integration des Clar-Unit-Testing-Frameworks (ursprünglich für libgit2 entwickelt) verbessert die Testmöglichkeiten von Git weiter.
Weitere bemerkenswerte Änderungen
- 'git fsck'-Erweiterungen: Verbesserte Integritätsprüfungen für Referenzspeicher-Backends, einschließlich eines neuen Unterbefehls 'git refs verify' zur Erkennung von Referenzbeschädigungen.
- Bereinigung ungenutzter Parameter: Eine mehrfache Veröffentlichungsinitiative zur Identifizierung und Behandlung ungenutzter Parameter gipfelt in Git 2.47, was zu saubererem und sichererem Code führt.
- Speicherleck-Behebungen: Anhaltende Bemühungen zur Beseitigung von Speicherlecks tragen zur Eignung von Git für lang laufende Prozesse und Bibliotheksnutzung bei.
- Visual Studio Code Integration: Der Befehl 'mergetool' von Git unterstützt jetzt nativ Visual Studio Code und erleichtert die 3-Wege-Merge-Auflösung.
Fazit
Git 2.47 bringt wertvolle Funktionen und Verbesserungen, die die Leistung, Benutzerfreundlichkeit und Wartbarkeit verbessern. Inkrementelle MIDXs versprechen eine bessere Skalierbarkeit, während Verbesserungen von 'for-each-ref' die Branch-Identifizierung vereinfachen. Die neue Plattformunterstützungspolitik und erweiterte Unit-Tests tragen zur Robustheit und Langlebigkeit von Git bei.
Ressource:
- Highlights aus Git 2.47
Verwandte Lektüre:
- Was ist Git und wie installiert man Git in Linux