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
