Nach drei Monaten Entwicklung wird die Version 2.52 des verteilten Systems zur Verwaltung von Quelltexten Git veröffentlicht. Git zeichnet sich durch hohe Leistung aus und bietet Werkzeuge fĂŒr nichtlineare Entwicklung, die auf Verzweigung und ZusammenfĂŒhrung von Branches basieren. Um die IntegritĂ€t der Geschichte und die WiderstandsfĂ€higkeit gegen nachtrĂ€gliche Ănderungen zu gewĂ€hrleisten, wird eine implizite Hashierung der gesamten vorangegangenen Geschichte in jedem Commit sowie die digitale Signierung von Entwicklern fĂŒr einzelne Tags und Commits verwendet. Der Code von Git wird unter der GPLv2+-Lizenz bereitgestellt.
Im Vergleich zur vorherigen Version wurden 637 Ănderungen in die neue Version aufgenommen, die mit Beteiligung von 94 Entwicklern (33 davon nahmen erstmals an der Entwicklung von Git teil) vorbereitet wurden. Die wichtigsten Neuerungen (1, 2, 3):
- Der Befehl âgit last-modifiedâ wurde hinzugefĂŒgt, um eine Liste der Dateien in der angegebenen Revision und der Commits anzuzeigen, durch die die letzten Ănderungen an jeder dieser Dateien vorgenommen wurden. $ git last-modified HEAD b56f6dcd7b4c90192018e848d0810f091d092913 test.h 29330ae4b820147c98e723399e9438c8bee60a8a test1.c 573ad8917beb99dc643b6e7f5c117a294384a575 test2.c
- Der Befehl âgit repoâ wurde hinzugefĂŒgt, um Aktionen im Zusammenhang mit dem Abrufen von Informationen aus dem Repository durchzufĂŒhren. Es wurden zwei Unterbefehle vorgeschlagen â âgit repo infoâ und âgit repo structureâ, die Informationen zu den Repository-Einstellungen und zur Struktur des Repositories ausgeben (z. B. kann die Anzahl der Referenzen und Objekte im Repository abgefragt werden). $ 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 | | * Andere | 0 | | | | | * Erreichbare Objekte | | | * Anzahl | 518955 | | * Commits | 77469 | | * BĂ€ume | 188865 | | * Blobs | 251631 | | * Tags | 990 |
- In den Befehl âgit refsâ wurden drei Unterbefehle integriert, die die verschiedenen und ĂŒberlappenden Low-Level-Operationen an 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â â Ausgabe einer Liste aller Referenzen (analog zu âgit for-each-refâ oder âgit show-refâ).
- âgit refs existsâ â ĂberprĂŒfung der Existenz einer Referenz (analog zu â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-basierenden Objekt-IDs beruhen. In den Befehl âgit fast-importâ wurde die UnterstĂŒtzung fĂŒr die Verarbeitung von signierten Tags analog zu signierten Commits implementiert. 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).
- Der Befehl âgit maintenanceâ hat UnterstĂŒtzung fĂŒr die neue Strategie âgeometricâ (âgit config set maintenance.strategy geometricâ) erhalten, die die Wartungszeit groĂer Monorepositories verkĂŒrzt. Im Vergleich zur vorher verfĂŒgbaren Strategie, die die Logik des Befehls âgit gcâ verwendet, vermeidet die neue Strategie das Neu-Packen aller Objekte und schlieĂt ĂŒbermĂ€Ăig ressourcenintensive Operationen aus, wie das ZusammenfĂŒhren aller Pack-Dateien (wenn möglich, wird die ZusammenfĂŒhrung in Teilen und ohne Bereinigung entfernter Objekte durchgefĂŒhrt).
- Der Befehl âgit sparse-checkout cleanâ wurde hinzugefĂŒgt, um die Wiederherstellung des Arbeitsverzeichnisses zu erleichtern, indem Dateien entfernt werden, die nicht der neuen Definition des Sparse-Checkout entsprechen und die in der lokalen Kopie gemÀà den aktuellen Sparse-Checkout-Einstellungen nicht vorhanden sein sollten.
- Um die Codebasis von KomplexitĂ€ten zu befreien und die Wartung zu erleichtern, wurde ein Refactoring durchgefĂŒhrt, um die Verwendung der globalen Variablen the_repository zu reduzieren.
- Die Anwendung von Bloom-Filtern, einer probabilistischen Struktur zur ĂberprĂŒfung von Memberships in Mengen, wurde erweitert, die eine falsche Bestimmung eines fehlenden Elements zulĂ€sst, jedoch das Ăbersehen eines vorhandenen Elements ausschlieĂt. Bloom-Filter werden jetzt verwendet, um die Suche in der Ănderungshistorie zu beschleunigen, wenn Masken in Dateipfaden angegeben werden, beispielsweise âfoo/bar/*/bazâ.
- Die Leistung des Befehls âgit describeâ wurde um 30 % verbessert, durch die Verwendung einer PrioritĂ€tswarteschlange. In âgit remote renameâ wurden die Umbenennungsoperationen beschleunigt. In âgit ls-filesâ wurde die Anwendung der Indizes erweitert. Die Verarbeitung des Befehls âgit log -Lâ hat sich merklich beschleunigt, da ĂŒberflĂŒssige dreistufige Vergleiche bei der Verarbeitung von Merge-Commits ausgeschlossen wurden. Es wurden Optimierungen in der Bibliothek xdiff vorgenommen.
- Es wurde die optionale Möglichkeit bereitgestellt, Implementierungen bestimmter interner Funktionen in der Programmiersprache Rust zu verwenden, wie z.B. das Codieren und Dekodieren von ganzzahligen Werten variabler LĂ€nge. StandardmĂ€Ăig wird kein Rust-Code verwendet, und um ihn zu aktivieren, muss das Build-Flag WITH_RUST angegeben werden. In Zukunft wird erwartet, dass bedeutendere interne Komponenten von Git auf Rust umgestellt werden, und dass Rust zu den verpflichtenden Build-AbhĂ€ngigkeiten in Git 3.0 gehört.
- Die Liste der inkompatiblen Ănderungen, die in der Git 3.0-Version angewendet werden, wurde aktualisiert. In Git 3.0 wurde beschlossen, die Standardkonfiguration fĂŒr init.defaultBranch auf âmainâ zu Ă€ndern, d.h. in Repositories, die mit dem Kommando âgit initâ erstellt werden, wird der Standardbranch âmainâ und nicht âmasterâ genannt. Es wird auch auf die Standardumstellung auf Objekt-IDs basierend auf dem SHA-256-Hash-Algorithmus hingewiesen, wenn neue Repositories initialisiert werden. Um die PortabilitĂ€t zwischen Repositories mit SHA-1- und SHA-256-Hash-basierten Objekt-IDs zu erleichtern, wird die Möglichkeit bereitgestellt, in einem Repository mit einem Hash-Algorithmus Push- und Pull-Operationen aus einem Repository, das einen anderen Hash-Algorithmus verwendet, durchzufĂŒhren.
Quelle: opennet.ru
