Veröffentlichung des Textmanagementsystems Git 2.54

Die Veröffentlichung des verteilten Systems zur Verwaltung von Quelltexten Git 2.54 wurde vorgestellt. Git zeichnet sich durch hohe LeistungsfĂ€higkeit aus und bietet Mittel fĂŒr die nichtlineare Entwicklung, die auf dem Branching und dem Merging von Zweigen basieren. Um die IntegritĂ€t der Historie und die Robustheit gegenĂŒber nachtrĂ€glichen Änderungen zu gewĂ€hrleisten, werden implizite Hashes der gesamten vorhergehenden Geschichte in jedem Commit verwendet, sowie digitale Signaturen von Entwicklern fĂŒr bestimmte Tags und Commits. Der Git-Code wird unter der GPLv2+-Lizenz verbreitet.

Im Vergleich zur vorherigen Version wurden 770 Änderungen vorgenommen, die mit der Beteiligung von 137 Entwicklern (66 von ihnen zum ersten Mal in der Entwicklung von Git) vorbereitet wurden. Die wichtigsten Neuerungen sind:

  • Das Kommando „git history“ wurde implementiert, das experimentelle Möglichkeiten zur Neufassung der Änderungsgeschichte bietet, die einfacher und sicherer zu verwenden sind als das Rebasieren von Commits mit dem Befehl „git rebase“. Es werden zwei Operationen bereitgestellt:
    • „git history reword <commit>“ zum Ändern der Nachricht im angegebenen Commit, ohne das Arbeitsverzeichnis und den Index zu verĂ€ndern (außer der Anmerkung bleibt der Rest unberĂŒhrt). Zum Beispiel zur Korrektur eines Tippfehlers.
    • „git history split <commit>“ zum interaktiven Aufteilen des angegebenen Commits in zwei verschiedene Commits, bei dem ausgewĂ€hlte Teile aus dem ursprĂŒnglichen Commit in einen zusĂ€tzlichen Commit verschoben werden.

    In zukĂŒnftigen Versionen wird die HinzufĂŒgung weiterer Befehle erwartet: „git history fixup“ zum Korrigieren eines Commits, „git history drop“ zum Löschen eines Commits, „git history reorder“ zum Ändern der Reihenfolge der Commits und „git history squash“ zum ZusammenfĂŒhren von Commits.

  • Eine neue Methode zur Bestimmung von Hooks in Konfigurationsdateien wurde implementiert. Anstatt Skripte mit Hooks im Verzeichnis „.git/hooks“ in jedem Repository unterzubringen, können die Befehle zum Aufrufen der Hooks jetzt direkt in den Konfigurationsdateien angegeben werden. Die Einstellungen können entweder 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 Hooks an ein Ereignis zu binden. Skripte aus „.git/hooks“ werden weiterhin aufgerufen, jedoch nach den Hooks aus den Konfigurationsdateien. FĂŒr die Anzeige der Liste der Hooks sollte der Befehl „git hook list“ verwendet werden, und um die AusfĂŒhrung bestimmter Hooks zu deaktivieren, sollte die Einstellung „hook..enabled = false“ verwendet werden. [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 dazu beitrĂ€gt, die Wartungszeit großer Monorepositories zu verkĂŒrzen. Im Vergleich zur zuvor verwendeten Strategie, die die Logik im Befehl „git gc“ anwendet, vermeidet die neue Strategie die Neupackung aller Objekte und schließt ressourcenintensive Operationen wie das ZusammenfĂŒhren aller Pack-Dateien aus (wenn möglich erfolgt die ZusammenfĂŒhrung schrittweise und ohne Bereinigung gelöschter Objekte).
  • Die Objektdatenbank (ODB) und die zugehörigen APIs wurden auf eine neue Architektur umgestellt, die auf der Verwendung von Plug-in-Backends basiert. Die durchgefĂŒhrte Umstrukturierung abstrahiert das Objektstorage-Format und wird es in Zukunft ermöglichen, solche Funktionen wie alternative Backends und Objektformate zu implementieren, zum Beispiel fĂŒr eine effizientere Speicherung großer BinĂ€rdateien oder zur Optimierung des Betriebs großer Git-Hosting-Dienste.
  • Im Team „git repo structure“, das Informationen ĂŒber die Struktur des Repositories ausgibt, werden nicht nur die GesamtgrĂ¶ĂŸe, sondern auch die grĂ¶ĂŸten Objekte jedes Typs angezeigt, was eine Bewertung der GrĂ¶ĂŸe ohne die Verwendung des externen Tools git-sizer ermöglicht. $ git repo structure 
 | * 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 Team „git replay“, das anstelle von „git rebase“ zur Rekonstruktion der Historie verwendet wird, Server ohne Arbeitsverzeichnis ist standardmĂ€ĂŸig atomare Aktualisierung der Referenzen aktiviert (anstatt eine Liste von update-ref-Befehlen zur manuellen AusfĂŒhrung auszugeben). Es wurde die Option „—revert“ fĂŒr die RĂŒckgĂ€ngigmachung der Änderungen einer Reihe von Commits implementiert, leere Resultat-Commits werden verworfen, und die Möglichkeit zur Rekonstruktion der Historie bis zum Root-Commit wurde geschaffen.
  • In „git rev-list“ und Ă€hnlichen Befehlen wurde die Option „—maximal-only“ hinzugefĂŒgt, um nur die von anderen Commits unerreichbaren Commits anzuzeigen.
  • In den Befehl „git repo info“ wurde die Option „—keys“ aufgenommen, um eine Liste aller bekannten SchlĂŒssel auszugeben.
  • In dem Befehl „git add -p“ wird beim Navigieren zwischen Codeblöcken mit den Tasten „J“ und „K“ die Markierung bereits genehmigter und ĂŒbersprungener Blöcke ermöglicht. Eine Option „—no-auto-advance“ wurde hinzugefĂŒgt, um die automatische Weiterleitung zur nĂ€chsten Datei zu deaktivieren, damit man zu vorherigen Dateien vor dem Commit zurĂŒckkehren kann.
  • Die Web-OberflĂ€che „gitweb“ wurde fĂŒr die Nutzung auf MobilgerĂ€ten optimiert.
  • Im Befehl „git apply —directory“ wird vor der Verwendung eine Normalisierung der Dateipfade, wie „.\/un\/..\/normalized\/path“, sichergestellt.
  • Die Möglichkeit zum HinzufĂŒgen eigener Unterbefehle wurde dokumentiert, indem die Dateien „git-<cmd>“ im Verzeichnis der ausfĂŒhrbaren Dateien platziert werden.
  • Im Befehl „git send-email“ wurde die UnterstĂŒtzung fĂŒr Client-Zertifikate hinzugefĂŒgt.
  • FĂŒr den Befehl „git status“ wurde die Einstellung „status.compareBranches“ implementiert, ĂŒber die anzugeben ist, 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 vereinfachen. git rebase —trailer „Reviewed-by: Test <test@example.com>“
  • Das Kommando „git fast-import“ hat die Möglichkeit hinzugefĂŒgt, Signaturen fĂŒr Commits zu ersetzen, die nach dem Import ungĂŒltig geworden sind.
  • Die UnterstĂŒtzung fĂŒr das Verpacken (Komprimierung) von Mehrpack-Indexen (MIDX) wurde hinzugefĂŒgt, bei der kleine MIDX-Indexschichten mit Informationen ĂŒber die VerfĂŒgbarkeit von Objekten und zugehörige Bitmap-Dateien zusammengefĂŒhrt werden, was die Anzahl der angesammelten Schichten in Ă€lteren Repositories verringert.
  • Im Kommando „git backfill“ wurde die Möglichkeit implementiert, Revisionen (Commit-Bereiche) und Pfadmuster (pathspec) anzugeben, um die herunterzuladenden Teile der Änderungshistorie einzuschrĂ€nken. git backfill main~100..main git backfill — ‘*.c’
  • Alternativen zur Aufrufform des Kommandos „git config list“ wurden hinzugefĂŒgt: „git config -l“ und „git config —list“.
  • Die Verwendung von Nicht-ASCII-Zeichen in den Aliasnamen von Kommandos, die in der Konfigurationsdatei festgelegt werden, wurde 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).
  • Bei der Kommunikation mit Repositories ĂŒber HTTP wird der Fehlercode 429 (Too Many Requests) nun bearbeitet. Anfragen, die mit einem solchen Fehler enden, werden nicht als schwerwiegendes Problem betrachtet, sondern als vorĂŒbergehender Fehler, dessen AusfĂŒhrung nach einiger Zeit wiederholt werden sollte. Die Verzögerung bis zur Wiederholung wird ĂŒber die Option „http.retryAfter“ festgelegt, die Anzahl der Wiederholungen — „http.maxRetries“, die Wartezeit — „http.maxRetryTime“.

Quelle: opennet.ru

60GB SSD 8Gb DDR4