Git 2.55

Präsentiert Release des verteilten Systems zur Verwaltung von Quelltexten Git 2.55. Zu den wichtigsten Änderungen gehören: Standardmäßige Einbeziehung der Rust-Builds, Implementierung des fsmonitor-Prozesses für Linux, neue Strategie zur Neupackung des inkrementellen MIDX-Indexes, der Befehl git history fixup zur Korrektur von Commits, Optimierung der Generierung von Bitmaps zur Objektverfügbarkeit, Unterstützung für parallele Ausführung von Hooks und der Befehl git format-rev. Der Git-Code wird unter der GPLv3-Lizenz bereitgestellt. steht unter der GPLv2+ Lizenz.

Im Vergleich zur vorherigen Version wurden 505 Änderungen angenommen, die mit der Unterstützung von 100 Entwicklern durchgeführt wurden, von denen 33 zum ersten Mal an der Entwicklung von Git beteiligt sind.

Wesentliche Neuerungen (github.blog, gitlab.com/blog, gitlab.com/git-scm):

  • Standardmäßig wurde hinzugefügt Unterstützung für Komponenten in Rust. Der Rust-Compiler rustc ein wurde in die Build-Abhängigkeiten aufgenommen. Um ohne Rust zu bauen, kann das Flag NO_RUST=1 bei der Ausführung der make-Utility oder -Drust=disabled beim Ausführen von meson configure verwendet werden. Die Möglichkeit, den Rust-Bau zu deaktivieren, wird bis zur Git-Version 3.0 unterstützt, in der Rust integriert sein wird. ist Teil des Tools zu den grundlegenden Abhängigkeiten. In der Sprache Rust wurde eine Schicht zur Portabilität zwischen Konfigurationen mit SHA-1- und SHA-256-Hashes implementiert, sowie einige interne Funktionen, wie die Codierung und Decodierung von ganzzahligen Werten variabler Länge. In Zukunft wird eine Überarbeitung bedeutender interner Komponenten von Git in Rust erwartet.
  • Im experimentellen Team "git history", das Möglichkeiten zur Neuschreibung der Änderungsverlauf bietet, wurde die Operation „git history fixup“ zum Korrigieren eines Commits hinzugefügt. Die Operation fixup ermöglicht es, Änderungen, die über git add hinzugefügt wurden, in einen früheren Commit zu verschieben und automatisch alle folgenden Commits zu überschreiben, ähnlich wie bei der Ausführung des Befehls git commit —fixup= und dem Start von git rebase —autosquash ~.
  • Für die Plattform Linux wurde ein Hintergrundprozess fsmonitor, der Änderungen im Dateisystem mithilfe des Mechanismus inotify überwacht 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».
  • Das git repack-Kommando hat den Modus —write-midx=incremental erhalten, der eine neue Strategie zur Aktualisierung der Metadaten im inkrementellen MIDX-Index (Multi-Pack-Index) implementiert. Diese ermöglicht es, ohne die Neuverpackung des gesamten Indexes auszukommen. Im inkrementellen Multi-Pack-Index wird statt eines großen Indexes, der Informationen über die Verteilung der Objekte auf Pack-Dateien enthält, eine Schichtung verwendet: Jede Schicht umfasst eine bestimmte Anzahl von Pack-Dateien und wird in einer separaten Bitmap-Datei gespeichert. Diese Struktur erlaubt es, Daten über Objekte in neuen Pack-Dateien zum Index hinzuzufügen, indem neue Schichten angefügt werden, ohne dass bereits bestehende Schichten neu aufgebaut werden müssen. Das Kommando git repack —write-midx=incremental ermöglicht es, eine neue Schicht zum inkrementellen MIDX-Index hinzuzufügen, die kürzlich erstellte Pack-Dateien umfasst. In Kombination mit dem Repository-Verpackungsmodus —geometric bietet der neue Befehl die Möglichkeit, neue Objekte aus mehreren Pack-Dateien in eine größere Pack-Datei zu konsolidieren und, falls nötig, die Verpackung und Zusammenführung mehrerer benachbarter Schichten des inkrementellen MIDX-Indices durchzuführen. Diese Strategie erlaubt es, bei der Ausführung von git repack nur die obersten Schichten umzuschreiben, während ältere große Schichten unberührt bleiben und verhindert ein unkontrolliertes Wachstum der Schichten, indem die Gesamtzahl der Schichten auf einem Niveau gehalten wird, das proportional zum Logarithmus der Gesamtzahl der Objekte ist.
  • Die Generierung von Verfügbarkeits-Zeichenvorlagen wurde erheblich optimiert durch einen neuen Algorithmus zur Baumdurchquerung, der überflüssige Rekursion vermeidet, Objektpositionen zwischenspeichert, Zeichenvorlagen vor deren Zusammenführung mittels XOR sortiert und den Code für die Erstellung von Pseudo-Verschmelzungs-Zeichenvorlagen überarbeitet.pseudo-merge). Im Optimierungstest-Repository konnte die Generierungszeit von Zeichenvorlagen von 612 auf 294 Sekunden verkürzt werden.
  • Es wurde die Möglichkeit der parallelen Ausführung unabhängiger Hooks in Konfigurationsdateien implementiert. Hooks, die den gemeinsamen Zustand beeinflussen oder berücksichtigen, wie z.B. das Ändern von Commit-Nachrichten oder das Überprüfen von Indizes und dem Arbeitsbaum, können jedoch nicht parallel ausgeführt werden. Darüber hinaus können Hooks, die Linters überprüfen und Unit-Tests durchführen, parallel gestartet werden. Die Hooks, die eine parallele Ausführung unterstützen, werden über den Parameter hook. Namen_huk.parallel = true konfiguriert. Die Anzahl der gleichzeitig ausgeführten Arbeiten wird über die Einstellung hook.jobs, hook.<event>.jobs oder die Befehlszeilenoption -j festgelegt.
  • In der git pack-objects —path-walk Funktionalität wurde die Möglichkeit implementiert, Filter wie blob:none, blob:limit=, tree:0, object:type=, sparse: und combine: anzugeben. Im durchgeführten Test konnte durch das Eliminieren von Blobs während der Ausführung von —path-walk die Größe der erzeugten Pack-Datei um 16 % reduziert werden.
  • Das Kommando git format-rev wurde hinzugefügt, um Revisionen und Objektnamen, die in Commit-Listen erwähnt werden oder in beliebigem Text vorkommen, zu formatieren (zum Beispiel kann es 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 Escape-Sequenzierung der meisten Steuersequenzen im Terminal in Informationsnachrichten und Fehlermeldungen, die vom Server übertragen werden, aktiviert. Bei einem Zugriff auf einen bösartigen Server könnten solche Escape-Sequenzen verwendet worden sein, um Ausgaben zu verschleiern oder zu modifizieren, beispielsweise durch Escape-Sequenzen zur Cursorbewegung und zur Textbereinigung. Die Unterstützung von Escape-Sequenzen zur farblichen Hervorhebung von Elementen bleibt bestehen.
  • Der Befehl git checkout -m speichert jetzt automatisch konfliktreiche lokale Änderungen im Stash-Bereich, ohne dass der Konflikt sofort gelöst werden muss.
  • Der Befehl git push ermöglicht es jetzt, Branches mit einem einzigen Befehl auf mehrere externe Git-Server zu legen. Zum Beispiel kann eine Gruppe 'publish' aus GitHub-, GitLab- und Mirror-Servern erstellt werden, um den Branch main nicht nur auf den Hauptserver, sondern auch auf Spiegle zu übertragen:

git config remotes.publish "github gitlab mirror"
git push publish main

  • Der Befehl git log —graph hat die Option —graph-lane-limit=<N> erhalten, um die Anzahl der vertikalen Streifen bei der Visualisierung von Branches zu begrenzen, wodurch Platz auf dem Bildschirm für Commit-Daten in Repositories mit vielen 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=<N> hinzugefügt, die es ermöglicht, die N ältesten Commits im Bereich auszuwählen.

Quelle: linux.org.ru

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