Die Veröffentlichung der verteilten Systemverwaltung von Quelltexten Git 2.50 ist erfolgt. Git zeichnet sich durch hohe Leistung aus und bietet Werkzeuge für nichtlineare Entwicklungen auf der Basis von Branching und Merging. Um die Integrität der Geschichte und die Resistenz gegen nachträgliche Änderungen zu gewährleisten, wird eine implizite Hashing der gesamten vorherigen Geschichte in jedem Commit verwendet, sowie die Bestätigung durch digitale Signaturen der Entwickler für einzelne Tags und Commits. Der Code von Git wird unter der Lizenz GPLv2+ verbreitet.
Im Vergleich zur vorherigen Version wurden in die neue Version 621 Änderungen aufgenommen, die von 98 Entwicklern durchgeführt wurden, von denen 35 erstmals an der Entwicklung beteiligt sind. Die wichtigsten Neuerungen:
- Die Möglichkeit, in mehrere Pack-Dateien der Basis unerreichbarer Objekte („cruft packs“) zu unterteilen, auf die im Repository keine Verweise existieren (keine Verweise von Zweigen oder Tags). Die Verwendung mehrerer kleiner Pack-Dateien anstelle einer großen ermöglicht eine erhebliche Reduzierung der Ein-/Ausgabe-Operationen beim Repacken von Repositories mit einer großen Anzahl unerreichbarer Objekte, da für jede Repack-Operation keine vollständigen Daten überschrieben werden müssen.
In der neuen Version wird die Option „—combine-cruft-below-size“ angeboten, mit der bestehende Pack-Dateien zusammengeführt werden können, deren Größe einen festgelegten Wert nicht überschreitet. Im Gegensatz zur früher verfügbaren Option „—max-cruft-size“ begrenzt die neue Option „—combine-cruft-below-size“ die maximale Größe der resultierenden Pack-Datei nicht, was eine effizientere Zusammenführung von Pack-Dateien in Repositories mit einer großen Anzahl unerreichbarer Objekte, die über mehrere Pack-Dateien verteilt sind, ermöglicht.
- Experimentelle Unterstützung für inkrementelle Updates von Multi-Pack-Indizes (MIDX) wurde hinzugefügt, wobei jede Schicht des MIDX-Indexes mit Informationen zur Verfügbarkeit von Objekten in einer separaten Bitmap-Datei gespeichert wird. In sehr großen Repositories ermöglicht die umgesetzte Form von Indizes eine schnelle und effiziente Hinzufügung neuer Bitmap-Daten zur Objektverfügbarkeit, wenn Commits eingehen.
- Aus dem Code-Gestell wurde die alte Engine zur Ausführung von Merge-Operationen "recursive" entfernt, die durch die vollständig überarbeitete Engine "ORT" (Ostensibly Recursive's Twin") ersetzt wurde, die produktiver, funktionaler und wartungsfreundlicher ist. ORT ermöglicht es, die Möglichkeit zur Zusammenführung zweier Objekte zu bestimmen, ohne neue Objekte im Repository zu erstellen (bei der alten Engine war der Befehl "git merge-tree —write-tree" erforderlich, der neue Objekte im Repository schrieb). In Git 2.50 wurde in dem Befehl merge-tree die Option "—quiet" implementiert, mit der die Möglichkeit zur Zusammenführung anhand des Rückgabecodes überprüft werden kann, ohne Daten ins Repository zu schreiben.
- In "git cat-file —batch" und ähnlichen Befehlen wurde die Option "—filter" hinzugefügt, die es ermöglicht, bestimmte Objekte während der Ausführung der Operation zu überspringen. git cat-file —batch-check='%(objectname)' —filter='object:type=tree'
- Im Befehl "git maintenance" wurden drei neue Aktionen implementiert: worktree-prune, rerere-gc und reflog-expire. Die Aktion worktree-prune dient zum Entfernen veralteter oder beschädigter Arbeitsbäume (worktrees) im Repository. Die Aktion rerere-gc entfernt alte Einträge, die nach der Behebung von Merge-Konflikten verbleiben. Die Aktion reflog-expire entfernt veraltete, nicht mehr verfügbare Objekte aus dem reflog.
- Der Befehl "git reflog drop" wurde hinzugefügt, um alle reflog-Daten für den angegebenen Branch zu löschen.
- Die Verarbeitung und Nutzung von Links wurde optimiert, zum Beispiel wurde die Zwischenspeicherung von Link-Präfixen implementiert, unnötige Überprüfungen beim Ausführen des Befehls "git update-ref" wurden entfernt, und die Effizienz bei der Suche nach bestehenden Link-Iteratoren wurde erhöht.
- Für die cURL-Bibliothek wurden die KeepAlive-Einstellungen http.keepAliveIdle, http.keepAliveInterval und http.keepAliveCount hinzugefügt.
- Im Befehl "git rev-list" wurde die Möglichkeit implementiert, im für maschinelles Parsing passenden Format auszugeben, bei dem jedes Feld durch das NUL-Zeichen getrennt ist.
- Die Perl-Sprache wurde aus den Abhängigkeiten entfernt, die für die Dokumentationswerkzeuge und die Durchführung des Testsets ("make test") erforderlich sind. Viele Perl-Einzeiler in den Tests wurden durch Shell-Funktionen ersetzt oder in C umgeschrieben.
- Ein userdiff-Handler für das Konfigurationsdateiformat ".ini" wurde hinzugefügt.
- Im Befehl send-email wurde die Unterstützung für den SMTP-Server von Outlook verbessert.
Quelle: opennet.ru
