Release von Git 2.55 mit standardmäßiger Rust-Unterstützung

Die neue Version des verteilten Quellcodeverwaltungssystems Git 2.55 wurde veröffentlicht. Zu den wichtigsten Änderungen gehören: standardmäßige Unterstützung für Builds mit Rust, Implementierung des fsmonitor-Prozesses für Linux, eine neue Strategie zum Repacken des inkrementellen MIDX-Index, der Befehl „git history fixup“ zur Korrektur von Commits, Optimierung der Generierung von Objektverfügbarkeits-Bitmap und Unterstützung für parallele Ausführung von Hooks, sowie der Befehl „git format-rev“. Der Git-Code wird unter der GPLv2+-Lizenz verbreitet.

Im Vergleich zur vorherigen Version wurden 505 Änderungen übernommen, die von 100 Entwicklern vorbereitet wurden, 33 davon haben erstmals an der Entwicklung von Git mitgewirkt. Die wichtigsten Neuerungen (1, 2, 3):

  • Standardmäßig ist die Unterstützung von Komponenten in Rust aktiviert. Der Compiler rustc
    wurde zu den Build-Abhängigkeiten hinzugefügt. Für einen Build ohne Rust kann das Flag „NO_RUST=1“ beim Starten des make-Werkzeugs oder „-Drust=disabled“ bei der Ausführung von „meson configure“ verwendet werden. Die Möglichkeit, den Build mit Rust zu deaktivieren, wird bis zur Git-Version 3.0 unterstützt, in der Rust zu den verpflichtenden Abhängigkeiten gehören wird. In Rust wurde eine Schicht für die Portabilität zwischen Konfigurationen mit SHA-1- und SHA-256-Hashes implementiert, sowie einige interne Funktionen wie die Kodierung und Dekodierung von variablen Längen integer-Werten. Zukünftig wird eine Überarbeitung wichtiger interner Git-Komponenten in Rust erwartet.
  • Dem experimentellen Befehl „git history“, der Möglichkeiten zur Wiederbeschreibung der Änderungsprotokolle bietet, wurde die Operation „git history fixup“ hinzugefügt, um einen Commit zu korrigieren. Die „fixup“-Operation ermöglicht es, Änderungen, die über „git add“ hinzugefügt wurden, in einen früheren Commit zu verschieben und automatisch alle nachfolgenden Commits neu zu schreiben, ähnlich wie bei der Ausführung des Befehls „git commit —fixup=“ und dem Start von „git rebase —autosquash ~“.
  • Für die Linux-Plattform wurde der Hintergrundprozess fsmonitor implementiert, der Änderungen im Dateisystem mithilfe des inotify-Mechanismus verfolgt. Dadurch entfällt die Notwendigkeit, das gesamte Arbeitsverzeichnis bei der Ausführung von Befehlen wie „git status“ zu durchsuchen. Die Aktivierung erfolgt über die Einstellung „core.fsmonitor“.
  • Der Befehl „git repack“ hat den Modus „—write-midx=incremental“ erhalten, der eine neue Strategie zur Aktualisierung der Metadaten im inkrementellen MIDX-Index (multi-pack index) realisiert. Dies ermöglicht es, auf die vollständige Neuverpackung des gesamten Index zu verzichten. Im inkrementellen Mehrpack-Index wird anstelle eines großen Index, der Informationen über die Verteilung der Objekte auf Pack-Dateien enthält, eine Schichtung eingesetzt – jede Schicht deckt eine bestimmte Anzahl von Pack-Dateien ab und wird in einer separaten Bitmap-Datei gespeichert. Diese Struktur ermöglicht das Hinzufügen von Objektinformationen in neuen Pack-Dateien, indem neue Schichten an den Index angehängt werden, ohne bestehende Schichten neu aufbauen zu müssen.

    Der Befehl „git repack —write-midx=incremental“ ermöglicht es, eine neue Schicht zum inkrementellen MIDX-Index hinzuzufügen, die kürzlich erstellte Packdateien abdeckt. In Kombination mit dem Packmodus „—geometric“ bietet der neue Befehl die Möglichkeit, neue Objekte aus mehreren Packdateien in einer größeren Packdatei zu konsolidieren und bei Bedarf mehrere benachbarte Schichten des inkrementellen MIDX-Index zu packen und zusammenzuführen. Eine solche Strategie ermöglicht es bei der Ausführung von „git repack“, nur die obersten Schichten neu zu schreiben, während alte, große Schichten unberührt bleiben, und gleichzeitig ein unkontrolliertes Wachstum der Schichtkette zu vermeiden, wobei die Gesamtzahl der Schichten proportional zum Logarithmus der Gesamtzahl der Objekte gehalten wird.

  • Die Generierung von Verfügbarkeits-Bitmaps wurde erheblich optimiert durch einen neuen Algorithmus zur Objekternavigation, der überflüssige Rekursionen ausschließt, die Positionen der Objekte cached, die Bitmaps vor ihrer Zusammenführung mit der XOR-Operation sortiert und den Code zur Erstellung von Pseudomerg-Bitmaps überarbeitet. Im Testrepository konnte die Generierungszeit der Bitmaps von 612 auf 294 Sekunden reduziert werden.
  • Die Möglichkeit zur parallelen Ausführung unabhängiger Hooks in Konfigurationsdateien wurde implementiert. Hooks, die den gemeinsamen Zustand beeinflussen oder berücksichtigen, wie etwa die Änderung von Commit-Nachrichten oder die Überprüfung von Indizes und dem Arbeitsverzeichnis, können nicht parallel ausgeführt werden. Gleichzeitig können jedoch Hooks für die Linter-Prüfung und das Ausführen von Unit-Tests parallel laufen. Hooks, die eine parallele Ausführung zulassen, werden über die Einstellung „hook. имя_хука.parallel = true“ konfiguriert. Die Anzahl der gleichzeitig laufenden Jobs wird durch die Einstellungen hook.jobs, hook.<event>.jobs oder die Befehlszeilenoption „-j“ festgelegt.
  • Im Befehl „git pack-objects —path-walk“ wurde die Möglichkeit implementiert, Filter wie „blob:none“, „blob:limit=“, „tree:0“, „object:type=“, „sparse:“ und „combine:“ anzugeben. In einem durchgeführten Test hat das Weglassen von Blobs während der Ausführung von „—path-walk“ die Größe der erzeugten Packdatei um 16 % reduziert.
  • Der Befehl „git format-rev“ wurde hinzugefügt, um Revisionen und Objektnamen, die in Commitslisten erwähnt oder in beliebigem Text vorkommen, zu formatieren (z. B. kann er in Hooks zur Verarbeitung von Commit-Nachrichten verwendet werden).

    git last-modified | git format-rev —stdin-mode=text —format=%an

    Junio C Hamano builtin/commit.c

  • Standardmäßig wird die Escapierung der meisten Steuersequenzen im Terminal in Informationsmeldungen und Fehlermeldungen aktiviert, die übertragen werden dem Server durch. Bei Zugriff auf bösartige Server konnten solche Escape-Sequenzen verwendet werden, um die Ausgabe zu verbergen oder zu modifizieren, beispielsweise durch Escape-Sequenzen zur Cursorbewegung und zum Löschen von Text. Die Unterstützung von Escape-Sequenzen zur farblichen Hervorhebung von Elementen bleibt bestehen.
  • Der Befehl „git checkout -m“ speichert jetzt automatisch konfliktbehaftete lokale Änderungen im Stash-Bereich, ohne dass der Konflikt sofort gelöst werden muss.
  • Der Befehl „git push“ wurde um die Möglichkeit erweitert, einen Branch mit einem einzigen Befehl auf mehrere externe Git-Server zu übertragen. Zum Beispiel kann für die Übertragung des Branches "main" nicht nur auf den Hauptserver, sondern auch auf Mirrors eine Gruppe „publish“ erstellt werden aus Server „github“, „gitlab“ und „mirror“:

    git config remotes.publish „github gitlab mirror“
    git push publish main

  • Dem Befehl „git log —graph“ wurde die Option „—graph-lane-limit=“ hinzugefügt, um die Anzahl der vertikalen Spuren bei der Visualisierung von Branches zu begrenzen, wodurch Platz auf dem Bildschirm für Commit-Daten in Repositories mit einer großen Anzahl von Branches bleibt.


    * | | | | 619931f561 Merge branch ‘dl/posix-unused-warning-clang’
    |\ \ \ \ \
    | * | | | ~ cf48887610 compat/posix.h: vereinfache GIT_GNUC_PREREQ() Vergleich
    | * | | | ~ ffd45926dc compat/posix.h: bereinige GIT_GNUC_PREREQ() und UNUSED
    |\ \ \ \ \~
    | * | | | ~ 3f5203eeb4 ls-files: filtere pathspec vor lstat

  • Den Befehlen „git log“ und „git rev-list“ wurde die Option „—max-count-oldest=“ hinzugefügt, mit der die N ältesten Commits im Bereich ausgewählt werden können.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster