Vorstellung Release des verteilten Versionskontrollsystems Git 2.54. Git zeichnet sich durch hohe Leistung aus und bietet Mittel fĂŒr nichtlineare Entwicklung, die auf Branching und Merging basieren. Um die IntegritĂ€t der Historie und die WiderstandsfĂ€higkeit gegen "RetroaktivitĂ€t" zu gewĂ€hrleisten, wird das gesamte vorherige Geschehen in jedem Commit implizit gehasht, und (digitale) Signaturen der Entwickler fĂŒr einzelne Tags und Commits werden verwendet. Git-Code wird verbreitet unter der GPLv2+-Lizenz.
Im Vergleich zur vorherigen Version wurden 770 Ănderungen fĂŒr die neue Version ĂŒbernommen, die von 137 Entwicklern (davon 66 erstmals an der Entwicklung von Git beteiligt) vorbereitet wurden.
-
Der Befehl âgit historyâ wurde eingefĂŒhrt, um experimentelle Möglichkeiten zur Neuschreibung von Ănderungsprotokollen bereitzustellen, die einfacher und sicherer in der Anwendung sind als das Rebasen von Commits mit dem Befehl git rebase. Zwei Operationen werden bereitgestellt:
- git history reword zur Neuschreibung der Nachricht im angegebenen Commit, ohne das Arbeitsverzeichnis und den Index zu verĂ€ndern (auĂer der Notiz, der Rest bleibt unangetastet). Zum Beispiel zum Beheben eines Tippfehlers.
- git history split zum interaktiven Aufteilen des angegebenen Commits in zwei verschiedene Commits, wobei ausgewĂ€hlte Teile aus dem ursprĂŒnglichen Commit in den zusĂ€tzlichen Commit verschoben werden.
In zukĂŒnftigen Veröffentlichungen ist die HinzufĂŒgung weiterer Befehle geplant: git history fixup zur Korrektur eines Commits, git history drop zum Löschen eines Commits, git history reorder zum Ăndern der Reihenfolge von Commits und git history squash zum Kombinieren von Commits.
-
Eine neue Methode zur Definition von Hooks wurde realisiert (hook) in den Konfigurationsdateien. Anstelle von Skripten mit Handlern im Verzeichnis .git/hooks in jedem Repository, können die Befehle zur AusfĂŒhrung von Handlern jetzt direkt in den Konfigurationsdateien festgelegt werden. Einstellungen können an das Repository gebunden oder in Konfigurationsdateien angegeben werden, die fĂŒr alle Repositories gelten (/etc/gitconfig) oder fĂŒr das Benutzer-Repository (~/.gitconfig). Es ist möglich, mehrere Handler an ein Ereignis zu binden. Skripte aus .git/hooks werden weiterhin aufgerufen, jedoch werden sie nach den Handlern aus den Konfigurationsdateien gestartet. Um die Liste der Handler anzuzeigen, sollte der Befehl git hook list verwendet werden, und um die AusfĂŒhrung bestimmter Handler selektiv zu deaktivieren â die Einstellung hook..enabled = false:
[hook "linter"] event = pre-commit command = ~/bin/linter âcpp20 [hook "no-leaks"] event = pre-commit command = ~/bin/leak-detector $ git hook list pre-commit global linter ~/bin/linter âcpp20 local no-leaks ~/bin/leak-detector
- Im Befehl âgit maintenanceâ ist standardmĂ€Ăig die Strategie geometric aktiviert (git config set maintenance.strategy geometric), die es ermöglicht, die Wartungszeit groĂer Monorepositories zu verkĂŒrzen. Im Vergleich zur zuvor verwendeten Strategie, die die Logik des Befehls git gc verwendete, vermeidet die neue Strategie die Neuverpackung aller Objekte und schlieĂt ĂŒbermĂ€Ăig ressourcenintensive Operationen wie das ZusammenfĂŒhren aller Packdateien aus (wenn möglich, erfolgt die ZusammenfĂŒhrung in Teilen und ohne Bereinigung der gelöschten Objekte).
- Die Objektdatenbank (ODB) und die damit verbundenen APIs wurden auf eine neue Architektur umgestellt, die auf der Verwendung von Plug-in-Backends basiert. Die durchgefĂŒhrte Umstrukturierung abstrahiert das Format der Objektspeicherung und wird in Zukunft solche Möglichkeiten wie alternative Backends und Objektformate ermöglichen, beispielsweise fĂŒr eine effizientere Speicherung groĂer BinĂ€rdateien oder zur Optimierung der Arbeit groĂer Git-Hosting-Anbieter.
- Im Befehl âgit repo structureâ, die Informationen ĂŒber die Struktur des Repositories ausgibt, zeigt nicht nur die GesamgröĂe an, sondern auch die gröĂten Objekte jedes Typs, was ermöglicht, bei der GröĂenschĂ€tzung ohne den Einsatz eines externen Werkzeugs auszukommen. git-sizer.
$ git repo Struktur ⊠| * GröĂte Objekte | | | * Commits | | | * Maximale GröĂe [1] | 17,23 KiB | | * Maximale Eltern [2] | 10 | | * BĂ€ume | | | * Maximale GröĂe [3] | 58,85 KiB | | * Maximale EintrĂ€ge [4] | 1,18 k | | * Blobs | | | * Maximale GröĂe [5] | 1019,51 KiB | | * Tags | | | * Maximale GröĂe [6] | 7,13 KiB |
- Im Befehl âgit replay», die anstelle von git rebase verwendet wird, um die Historie auf dem Server ohne Arbeitsverzeichnis neu zu erstellen, ist standardmĂ€Ăig ein atomares Aktualisieren der Referenzen aktiviert (anstatt eine Liste von update-ref-Befehlen zur manuellen AusfĂŒhrung auszugeben), es wurde die Option ârevert implementiert, um Ănderungen aus einer Reihe von Commits rĂŒckgĂ€ngig zu machen, und es wird sichergestellt, dass leere Commits nach dem Ergebnis verworfen werden können, sowie die Möglichkeit geschaffen, die Historie bis zum Wurzel-Commit neu zu erstellen.
- In âgit rev-list» und Ă€hnlichen Befehlen wurde die Option âmaximal-only hinzugefĂŒgt, um nur die Commits anzuzeigen, die von anderen Commits nicht erreicht werden können.
- Im Befehl âgit repo info» wurde die Option âkeys hinzugefĂŒgt, um eine Liste aller bekannten SchlĂŒsseln auszugeben.
- Im Befehl âgit add -p» wurde beim Navigieren zwischen den Codeblöcken mit den Tasten âJâ und âKâ angezeigt, welche bereits genehmigten und ĂŒbersprungenen Blöcke markiert sind. Die Option âno-auto-advance wurde hinzugefĂŒgt, um das automatische Wechseln zur nĂ€chsten Datei zu deaktivieren, sodass man vor dem Commit zu frĂŒheren Dateien zurĂŒckkehren kann.
- Der Web-Interface âgitweb» wurde fĂŒr die Nutzung von mobilen GerĂ€ten optimiert.
- Im Befehl âgit apply âdirectory» stellt sicher, dass die Dateipfade, wie z. B. .\/un\/..\/normalized\/path, vor der Verwendung normalisiert werden.
- Die Möglichkeit, eigene Unterkommandos durch das Platzieren von Dateien git-<cmd> im Verzeichnis mit den ausfĂŒhrbaren Dateien hinzuzufĂŒgen, wurde dokumentiert.
- Im Befehl âgit send-email» unterstĂŒtzt jetzt Client-Zertifikate.
- FĂŒr den Befehl âgit status» wurde die Konfiguration status.compareBranches implementiert, mit der angegeben werden kann, mit welchen Branches der aktuelle Branch verglichen werden soll:
[status] compareBranches = @{upstream} @{push}
- In âgit rebase» wurde die Option âtrailer hinzugefĂŒgt, um das HinzufĂŒgen von Metadaten zu allen Commits zu erleichtern:
git rebase âtrailer "Reviewed-by: Test <test@example.com>"`
- Im Befehl âgit fast-import» wurde die Möglichkeit hinzugefĂŒgt, Signaturen fĂŒr Commits zu ersetzen, die nach dem Import ungĂŒltig geworden sind.
- Die UnterstĂŒtzung der Verpackung (Compaction) von Multi-Pack-Indexes MIDX wurde hinzugefĂŒgt, wobei kleine Schichten des MIDX-Indexes mit Informationen zur VerfĂŒgbarkeit von Objekten und den zugehörigen Bitmap-Dateien zusammengefĂŒhrt werden. Dies reduziert die Anzahl der angesammelten Schichten in langjĂ€hrigen Repositories.
- Im git backfill-Befehl wurde die Möglichkeit implementiert, Revisionen (Commit-Bereiche) und Pfadmasken (pathspec) zur Eingrenzung der zu ladenden Teile der Ănderungshistorie anzugeben:
git backfill main~100..main git backfill â â*.câ
- Alternative Aufrufformen des Kommandos git config list wurden hinzugefĂŒgt â git config -l und git config âlist.
- Die Verwendung von Nicht-ASCII-Zeichen in den Alias-Namen fĂŒr Befehle, die in der Konfigurationsdatei festgelegt werden, ist erlaubt:
[alias "holen"] command = fetch
- Die Darstellung von Signaturen, deren GPG-SchlĂŒssel abgelaufen ist, aber zum Zeitpunkt der Unterzeichnung des Commits gĂŒltig war, wurde geĂ€ndert. Solche Signaturen werden jetzt als korrekt angezeigt, mit dem Hinweis auf die Veralterung des SchlĂŒssels (frĂŒher wurden sie rot hervorgehoben, was den Eindruck vermittelte, sie seien fehlerhaft).
- Beim Zugriff auf Repositories ĂŒber HTTP wurde die Behandlung des Fehlers mit dem Code 429 (Too Many Requests) gewĂ€hrleistet. Anfragen, die mit diesem Fehler abgeschlossen wurden, werden jetzt nicht als schwerwiegendes Problem betrachtet, sondern als vorĂŒbergehender Fehler, bei dem die Operation nach einer bestimmten Zeit wiederholt werden sollte. Die Verzögerung vor der Wiederholung wird ĂŒber die Option http.retryAfter festgelegt, die Anzahl der Wiederholungen â http.maxRetries, die Wartezeit â http.maxRetryTime.
Quelle: linux.org.ru
