Git-Version 2.55 mit standardmĂ€ĂŸiger UnterstĂŒtzung fĂŒr Rust

Die Veröffentlichung des verteilten Systems zur Verwaltung von Quelltexten Git 2.55 wurde vorgestellt. Zu den wichtigsten Änderungen gehören: standardmĂ€ĂŸig aktivierte Rust-Builds, die Implementierung des fsmonitor-Prozesses fĂŒr Linux, eine neue Strategie zur Neupackung des inkrementellen MIDX-Index, der Befehl „git history fixup“ zur Korrektur von Commits, die Optimierung der Generierung von VerfĂŒgbarkeits-Bitmaps und die UnterstĂŒtzung der parallelen AusfĂŒhrung von Hooks sowie der Befehl „git format-rev“. Der Git-Code wird unter der GPLv2+-Lizenz vertrieben.

Im Vergleich zur vorherigen Version wurden in das Update 505 Änderungen aufgenommen, die mit der Beteiligung von 100 Entwicklern erstellt wurden, von denen 33 zum ersten Mal an der Entwicklung von Git teilnahmen. Die wichtigsten Neuerungen (1, 2, 3):

  • Die UnterstĂŒtzung fĂŒr Komponenten in der Programmiersprache Rust ist standardmĂ€ĂŸig aktiviert. Der Rust-Compiler rustc
    wurde als Build-AbhĂ€ngigkeit hinzugefĂŒgt. Um ohne Rust zu bauen, kann das Flag „NO_RUST=1“ beim AusfĂŒhren des Make-Tools oder „-Drust=disabled“ beim AusfĂŒhren 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 Pflicht-AbhĂ€ngigkeiten zĂ€hlt. In Rust wurde eine Schicht zur PortabilitĂ€t zwischen Konfigurationen mit SHA-1- und SHA-256-Hashes sowie einige interne Funktionen wie die Kodierung und Dekodierung variabler Ganzzahlen realisiert. In Zukunft wird erwartet, dass bedeutende interne Komponenten von Git in Rust neu gestaltet werden.
  • Im experimentellen Befehl „git history“, der die Möglichkeit zum Überschreiben von ÄnderungsverlĂ€ufen bietet, wurde die Funktion „git history fixup“ zur Korrektur von Commits hinzugefĂŒgt. Die „fixup“-Operation ermöglicht es, Änderungen, die ĂŒber „git add“ hinzugefĂŒgt wurden, in einen frĂŒheren Commit zu verschieben und alle nachfolgenden Commits automatisch, Ă€hnlich wie beim AusfĂŒhren des Befehls „git commit —fixup=“ und dem Start von „git rebase —autosquash ~“, neu zu schreiben.
  • FĂŒr die Linux-Plattform wurde ein Hintergrundprozess fsmonitor implementiert, der Änderungen im Dateisystem mithilfe des inotify-Mechanismus verfolgt und es ermöglicht, den gesamten Arbeitsordner bei der AusfĂŒhrung von Befehlen wie „git status“ zu umgehen. 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 von Metadaten im inkrementellen MIDX-Index (multi-pack index) implementiert, die ein vollstĂ€ndiges Repacken des gesamten Indexes ĂŒberflĂŒssig macht. Im inkrementellen Multi-Pack-Index wird anstelle eines großen Indexes, der Informationen ĂŒber die Verteilung von Objekten auf Pack-Dateien enthĂ€lt, eine Schichtung angewendet – jede Schicht deckt eine bestimmte Anzahl von Pack-Dateien ab und wird in einer separaten Bitmap-Datei gespeichert. Eine solche Struktur ermöglicht es, Daten ĂŒber Objekte in neuen Pack-Dateien in den Index hinzuzufĂŒgen, 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 in den inkrementellen MIDX-Index hinzuzufĂŒgen, die kĂŒrzlich erstellte Pack-Dateien umfasst. In Kombination mit dem Modus zum Verpacken von Repositorys „—geometric“ bietet der neue Befehl die Möglichkeit, neue Objekte aus mehreren Pack-Dateien in einer grĂ¶ĂŸeren Pack-Datei zusammenzufassen und gegebenenfalls das Packen und ZusammenfĂŒhren mehrerer benachbarter Schichten des inkrementellen MIDX-Index durchzufĂŒhren. Eine solche Strategie ermöglicht es beim AusfĂŒhren von „git repack“, nur die oberen Schichten neu zu schreiben und die alten großen Schichten unberĂŒhrt zu lassen sowie ein unkontrolliertes Wachstum der Schichtenkette zu vermeiden, indem die Gesamtzahl der Schichten auf einem Niveau gehalten wird, das dem logarithmischen VerhĂ€ltnis zur Gesamtzahl der Objekte entspricht.

  • Die Generierung von Bitmaps zur VerfĂŒgbarkeit von Objekten wurde erheblich optimiert durch einen neuen Algorithmus zum Durchlaufen des Objektbaums, der ĂŒberflĂŒssige Rekursionen ausschließt, Positionsdaten von Objekten zwischenspeichert, Bitmaps vor ihrer ZusammenfĂŒhrung mit XOR sortiert und den Code zur Erstellung von Pseudo-ZusammenfĂŒhrungs-Bitmaps (pseudo-merge) ĂŒberarbeitet. In einem Testrepository erlaubten die Optimierungen die VerkĂŒrzung der Generierungszeit fĂŒr Bitmaps von 612 auf 294 Sekunden.
  • Die Möglichkeit zur parallelen AusfĂŒhrung unabhĂ€ngiger Hooks in Konfigurationsdateien wurde realisiert. Hooks, die den gemeinsamen Zustand beeinflussen oder ihn berĂŒcksichtigen, können nicht gleichzeitig ausgefĂŒhrt werden, beispielsweise Hooks, die Commit-Kommentare Ă€ndern oder Indizes und Arbeitsverzeichnisse inspizieren. Es können jedoch gleichzeitig Hooks fĂŒr Linter-Checks und zum AusfĂŒhren von Unit-Tests gestartet werden. Hooks, die die parallele AusfĂŒhrung unterstĂŒtzen, werden ĂŒber den Parameter „hook.hook_name.parallel = true“ konfiguriert. Die Anzahl der gleichzeitig ausgefĂŒhrten Jobs wird ĂŒber die Einstellungen hook.jobs, hook..jobs oder die Befehlszeilenoption „-j“ festgelegt.
  • In dem Befehl „git pack-objects —path-walk“ wurde die Möglichkeit eingefĂŒhrt, Filter anzugeben, wie „blob:none“, „blob:limit=“, „tree:0“, „object:type=“, „sparse:“ und „combine:“. Im durchgefĂŒhrten Test erlaubte das Abweisen von Blobs wĂ€hrend der AusfĂŒhrung von „—path-walk“, die GrĂ¶ĂŸe der erzeugten Pack-Datei um 16 % zu reduzieren.
  • Der Befehl „git format-rev“ wurde hinzugefĂŒgt, um Revisionen und Objektbezeichnungen, die in Commit-Listen erwĂ€hnt werden oder in beliebigem Text vorkommen (zum Beispiel kann er in Hooks zur Bearbeitung von Commit-Kommentaren verwendet werden), zu formatieren.

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

    Junio C Hamano builtin/commit.c

  • Die Escape-Sequenzierung der meisten Steuersequenzen fĂŒr Terminal wird in Informationsmeldungen und Fehlertexten, die ĂŒbertragen werden, standardmĂ€ĂŸig aktiviert. ServerBeim Zugriff auf schadhafte zu einem Server konnte derartige Escape-Sequenzen zur Tarnung oder Modifikation der Ausgabe verwendet werden, beispielsweise durch Escape-Sequenzen zum Bewegen des Cursors und zum Löschen von Texten. Die UnterstĂŒtzung von Escape-Sequenzen zur farblichen Hervorhebung von Elementen bleibt bestehen.
  • Der Befehl „git checkout -m“ speichert jetzt automatisch konflikttrĂ€chtige lokale Änderungen im Stash-Bereich, ohne dass der Konflikt sofort gelöst werden muss.
  • Im Befehl „git push“ wurde die Möglichkeit hinzugefĂŒgt, einen Branch mit einem Befehl auf mehrere externe Git-Server zu ĂŒbertragen. Zum Beispiel kann ein Branch „main“ nicht nur auf den Hauptserver, sondern auch auf Spiegel ĂŒbertragen werden, indem eine „publish“-Gruppe aus Server „github“, „gitlab“ und „mirror“ erstellt wird:

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

  • Der Befehl „git log —graph“ wurde um die Option „—graph-lane-limit=“ erweitert, um die Anzahl der vertikalen Linien bei der Visualisierung von Branches zu begrenzen, was Platz auf dem Bildschirm fĂŒr Commit-Daten in Repositories mit vielen Branches schafft.

    

    * | | | | 619931f561 ZusammenfĂŒhren des Branches ‘dl/posix-unused-warning-clang’
    |\ \ \ \ \
    | * | | | ~ cf48887610 compat/posix.h: vereinfacht den GIT_GNUC_PREREQ() Vergleich
    | * | | | ~ ffd45926dc compat/posix.h: bereinigt GIT_GNUC_PREREQ() und UNUSED
    |\ \ \ \ \~
    | * | | | ~ 3f5203eeb4 ls-files: filtert pathspec vor lstat

  • Den Befehlen „git log“ und „git rev-list“ wurde die Option „—max-count-oldest=“ hinzugefĂŒgt, um die N Ă€ltesten Commits im Bereich auszuwĂ€hlen.

Quelle: opennet.ru

60GB SSD 8Gb DDR4