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
