Nach drei Monaten Entwicklung wurde die Version 2.52 des verteilten Systems zur Verwaltung von Quelltexten Git veröffentlicht. Git zeichnet sich durch hohe LeistungsfĂ€higkeit aus und bietet Werkzeuge fĂŒr die nichtlineare Entwicklung, die auf Verzweigung und ZusammenfĂŒhrung von Branches basieren. Um die IntegritĂ€t der Historie und die WiderstandsfĂ€higkeit gegen nachtrĂ€gliche Ănderungen zu gewĂ€hrleisten, wird eine implizite Hashierung der gesamten vorherigen Historie in jedem Commit verwendet sowie die Verifizierung durch digitale Signaturen der Entwickler fĂŒr bestimmte Tags und Commits. Der Git-Code wird unter der GPLv2+ Lizenz verbreitet.
Im Vergleich zur vorherigen Version wurden in die neue Version 637 Ănderungen aufgenommen, die mit der Beteiligung von 94 Entwicklern vorbereitet wurden (33 nahmen erstmals an der Entwicklung von Git teil). Wichtige Neuerungen (1, 2, 3):
- Der Befehl âgit last-modifiedâ wurde hinzugefĂŒgt, um eine Liste von Dateien in der angegebenen Revision sowie der Commits anzuzeigen, die die letzten Ănderungen an jeder dieser Dateien vorgenommen haben. $ git last-modified HEAD b56f6dcd7b4c90192018e848d0810f091d092913 test.h 29330ae4b820147c98e723399e9438c8bee60a8a test1.c 573ad8917beb99dc643b6e7f5c117a294384a575 test2.c
- Der Befehl âgit repoâ wurde hinzugefĂŒgt, um Aktionen zum Abrufen von Informationen aus einem Repository auszufĂŒhren. Zwei Unterbefehle wurden vorgeschlagen â âgit repo infoâ und âgit repo structureâ, die Informationen ĂŒber die Repository-Einstellungen und die Struktur des Repositories ausgeben (zum Beispiel kann festgestellt werden, wie viele Referenzen und Objekte sich im Repository befinden). $ git repo info object.format references.format object.format=sha1 references.format=reftable $ git repo structure | Repository-Struktur | Wert | | âââââââââ | âââ | | * Referenzen | | | * Anzahl | 1983 | | * Branches | 4 | | * Tags | 1125 | | * Remotes | 854 | | * Sonstige | 0 | | | | | * Erreichbare Objekte | | | * Anzahl | 518955 | | * Commits | 77469 | | * Trees | 188865 | | * Blobs | 251631 | | * Tags | 990 |
- Dem Befehl âgit refsâ wurden drei Unterbefehle hinzugefĂŒgt, die disparate und sich ĂŒberschneidende Low-Level-Operationen auf Referenzen (git for-each-ref, git show-ref, git update-ref und git pack-refs) vereinheitlichen.
- âgit refs optimizeâ â Optimierung des Backends zur Speicherung von Referenzen (analog zu âgit pack-refsâ).
- âgit refs listâ â Gibt eine Liste aller Referenzen aus (analog zu âgit for-each-refâ oder âgit show-refâ).
- âgit refs existsâ â ĂberprĂŒft die Existenz einer Referenz (entspricht âgit show-ref âexistsâ).
- Das Format fĂŒr den Export oder Import von Commit-Historien wurde um die Möglichkeit erweitert, mit kryptografischen Signaturen zu arbeiten, die sowohl auf SHA-1- als auch auf SHA-256-basierten Objekt-IDs basieren. Das Kommando âgit fast-importâ unterstĂŒtzt jetzt die Verarbeitung von signierten Tags analog zu signierten Commits. Es wurden die Optionen ââsigned-commits=<Modus>â und ââsigned-tags=<Modus>â hinzugefĂŒgt, um die Verarbeitung von signierten Commits und Tags wĂ€hrend des Imports zu steuern (der Modus kann die Werte verbatim, warn-verbatim, warn-stri, strip oder abort annehmen).
- Im Befehl âgit maintenanceâ wurde eine neue Strategie âgeometricâ hinzugefĂŒgt (âgit config set maintenance.strategy geometricâ), die es ermöglicht, die Wartungszeit groĂer Monorepositories zu verkĂŒrzen. Im Vergleich zur zuvor verfĂŒgbaren Strategie, die die Logik des Befehls âgit gcâ verwendet, vermeidet die neue Strategie die Neupackung aller Objekte und schlieĂt ressourcenintensive Operationen wie das ZusammenfĂŒhren aller Pack-Dateien aus (wenn möglich, wird die ZusammenfĂŒhrung schrittweise und ohne das Reinigen von entfernten Objekten durchgefĂŒhrt).
- Das Kommando âgit sparse-checkout cleanâ wurde hinzugefĂŒgt, um die Wiederherstellung des Arbeitsverzeichnisses zu vereinfachen, indem Dateien entfernt werden, die nicht mit der neuen Definition des sparse-checkouts ĂŒbereinstimmen und nicht in der lokalen Kopie gemÀà den aktuellen sparse-checkout-Einstellungen vorhanden sein sollten.
- Um die Codebasis von KomplexitĂ€t zu befreien und die Wartung zu vereinfachen, wurde ein Refactoring durchgefĂŒhrt, um die Verwendung der globalen Variable the_repository zu reduzieren.
- Die Anwendung von Bloom-Filtern, einer probabilistischen Struktur zur ĂberprĂŒfung des Vorhandenseins in einer Menge, wurde erweitert. Diese ermöglichen eine falsche Bestimmung fehlender Elemente, schlieĂen jedoch das Ăbersehen vorhandener Elemente aus. Bloom-Filter werden jetzt verwendet, um die Suche in der Ănderungshistorie zu beschleunigen, indem Wildcards in Dateipfaden angegeben werden, wie zum Beispiel âfoo/bar/*/bazâ.
- Die Performance des Befehls âgit describeâ wurde um 30 % verbessert, dank der Nutzung einer PrioritĂ€tenwarteschlange. Die Umbenennung von Remote-Links in âgit remote renameâ wurde beschleunigt. Die Anwendung von Indizes in âgit ls-filesâ wurde erweitert. Die Geschwindigkeit des Befehls âgit log -Lâ wurde deutlich erhöht, indem ĂŒberflĂŒssige dreistufige Vergleiche bei der Verarbeitung von Merge-Commits ausgeschlossen wurden. Optimierungen wurden in die xdiff-Bibliothek eingefĂŒhrt.
- Es wurde die optionale Möglichkeit eingefĂŒhrt, Implementierungen in der Programmiersprache Rust fĂŒr einige interne Funktionen wie das Kodieren und Dekodieren von variablen ganzzahligen Werten zu verwenden. StandardmĂ€Ăig wird der Rust-Code nicht verwendet, und um ihn zu aktivieren, muss das Build-Flag WITH_RUST angegeben werden. In Zukunft wird erwartet, dass eine Ăberarbeitung wichtiger interner Git-Komponenten in Rust erfolgt und Rust zu den erforderlichen Build-AbhĂ€ngigkeiten in Git 3.0 hinzugefĂŒgt wird.
- Die Liste der inkompatiblen Ănderungen, die in der Git-Version 3.0 angewendet werden, wurde aktualisiert. In Git 3.0 wurde beschlossen, die Standardkonfiguration fĂŒr init.defaultBranch auf "main" zu Ă€ndern. Das bedeutet, dass in Repositories, die mit dem Befehl âgit initâ erstellt werden, der Standardbranch "main" und nicht "master" genannt wird. AuĂerdem wird der Wechsel zum Standard-Hashalgorithmus SHA-256 fĂŒr Objektnummern bei der Initialisierung neuer Repositories bemerkt. Um die PortabilitĂ€t zwischen Repositories mit SHA-1 und SHA-256 Hash-IDs zu erleichtern, wurde die Möglichkeit geschaffen, in einem Repository mit einem Hashalgorithmus Push- und Pull-Operationen von einem Repository, das einen anderen Hashalgorithmus verwendet, durchzufĂŒhren.
Quelle: opennet.ru
