Nach drei Monaten Entwicklung wurde die Veröffentlichung des verteilten Versionsverwaltungssystems Git 2.46 veröffentlicht. Git ist eines der beliebtesten, zuverlässigsten und leistungsstärksten Versionsverwaltungssysteme, das flexible Mittel für nicht-lineare Entwicklungen bietet, die auf Verzweigungen und Zusammenführungen basieren. Zur Sicherstellung der Integrität der Geschichte und der Widerstandsfähigkeit gegenüber nachträglichen Änderungen wird eine implizite Hashierung der gesamten vorherigen Historie in jedem Commit verwendet, und es ist auch möglich, die digitalen Signaturen einzelner Tags und Commits der Entwickler zu verifizieren. Der Git-Code wird unter der Lizenz GPLv2+ verbreitet.
Im Vergleich zur vorherigen Version wurden in die neue Version 746 Änderungen aufgenommen, die mit der Beteiligung von 96 Entwicklern vorbereitet wurden, von denen 31 erstmals an der Entwicklung teilnehmen. Die wichtigsten Neuerungen sind:
- Es wurde experimentelle Unterstützung für eine neue Art von Bitmaps hinzugefügt – die „pseudo-merge reachability bitmap“, in der, im Gegensatz zur Struktur der „reachability bitmap“, die Informationen über Objekt-Sets, die mit Commits verbunden sind, nicht an jedem einzelnen Commit gebunden sind, sondern an mehreren Commits gleichzeitig. Diese Organisation ermöglicht es, eine Bitmap zur Bestimmung der Objekte für Commits in verschiedenen Zweigen zu verwenden, was in großen Repositorien die Notwendigkeit verringert, eine große Anzahl individueller Bitmaps zu erstellen, und erheblich die Objektdurchlaufgeschwindigkeit erhöht, um festzustellen, welche Objekte an den Client gesendet werden müssen, bei der Durchführung von Operationen wie „git fetch“, „git rev-list“ und „git clone“. Um die neue Art von Bitmaps zu aktivieren und die Logik ihrer Auswahl und Nutzung zu bestimmen, wurde eine Reihe von Einstellungen „bitmapPseudoMerge“ vorgeschlagen: git config bitmapPseudoMerge.all.pattern ‘refs/(heads|tags)/’ git config bitmapPseudoMerge.all.threshold now git config bitmapPseudoMerge.all.stableThreshold never git repack -adb
- Eine neue Befehlszeilenschnittstelle für den Befehl „git config“ wurde umgesetzt, bei der anstelle von separaten Optionen zum Anzeigen, Umbenennen und Löschen von Einstellungen und Sektionen wie „—get“, „—get-all“, „—unset“ und „—remove-section“ eine Reihe separater Subbefehle angeboten wird. Beispielsweise kann nun der Befehl „git config list“ verwendet werden, um alle Repository-Einstellungen anzuzeigen, und der Befehl „git config get “, um den Inhalt eines bestimmten Parameters zu überprüfen. Für eine zusätzliche Filterung der Ergebnisse kann mit der Option „—regexp“ ein Filter basierend auf regulären Ausdrücken festgelegt werden.
- Im Protokoll „credential helper“, das zum Übertragen von Anmeldeinformationen beim Zugriff auf Repositories mit eingeschränktem Zugriff verwendet wird, wurde die Unterstützung neuer Felder „authtype“ und „credential“ hinzugefügt, die die Erstellung von Handlern für HTTP-Authentifizierungssysteme ermöglichen, die nicht auf die Überprüfung von Benutzername und Passwort beschränkt sind, zum Beispiel bei Verwendung eines Bearer Tokens in OAuth 2.0. Bislang mussten sensible Daten im Klartext im Parameter http.extraHeader übergeben werden, um mit solchen Authentifizierungssystemen zu arbeiten. Darüber hinaus wurde dem Protokoll die Möglichkeit hinzugefügt, den Status jedes Anmeldeinformationshandlers zu speichern, um mehrstufige Authentifizierungsmethoden zu unterstützen, die in Protokollen wie NTLM und Kerberos verwendet werden.
- Die Entwicklung des experimentellen Backends „reftable“ zur effektiven Speicherung von Verweisen auf Branches und Tags im Repository wurde fortgesetzt. Dieses Backend verwendet einen Blockspeicher, der von dem Projekt JGit eingesetzt wird und optimiert ist, um eine sehr große Anzahl von Verweisen zu speichern (traditionelle Speicherformate für Verweise führen in Repositories mit vielen Verweisen zu spürbaren Overheads durch die Ablage einer sehr großen Anzahl von Dateien in einem Verzeichnis, wenn die Verweise im Verzeichnis $GIT_DIR/refs gespeichert sind, oder die Notwendigkeit, eine große Datei bei jedem Update neu zu schreiben, wenn die Verweise in der Datei $GIT_DIR/packed_refs gespeichert sind). In der neuen Version wurde der Befehl „git refs migrate —ref-format=reftable“ hinzugefügt, um bestehende Repositories auf das Backend „reftable“ zu migrieren (zuvor wurde das Backend nur bei der Initialisierung des Repositories aktiviert).
- In das Git-Team wurde die Option „—no-advice“ hinzugefügt, die alle Hinweise und Empfehlungen deaktiviert. Dies kann nützlich sein, um zu verhindern, dass das Protokoll mit überflüssigen Informationen überladen wird, wenn Git automatisiert aufgerufen wird.
- Es hat mit dem Prozess begonnen, einige Prüfungen aus dem Testset auf Unit-Tests umzustellen, was das Testen von Low-Level-Komponenten vereinfachen und die Effizienz des Testprozesses auf der Windows-Plattform steigern wird, auf der hohe Overheadkosten durch das Starten einer großen Anzahl von Prozessen während der Ausführung der in Form von Shell-Skripten implementierten Tests entstehen.
- Im Code zur Analyse der Farbeinstellungen wurde die Möglichkeit hinzugefügt, die Darstellung „#RGB“ neben „#RRGGBB“ zu verwenden.
Quelle: opennet.ru
