Die Veröffentlichung des Quellcode-Management-Systems Git 2.35.

Nach zwei Monaten Entwicklung wurde die Version 2.35 des verteilten Systems zur Verwaltung von Quelltexten Git veröffentlicht. Git ist eines der beliebtesten, zuverlĂ€ssigsten und leistungsfĂ€higsten Versionsverwaltungssysteme, das flexible Mittel fĂŒr die nichtlineare Entwicklung bietet, die auf dem Verzweigen und ZusammenfĂŒhren von Branches basieren. Um die IntegritĂ€t der Historie und die WiderstandsfĂ€higkeit gegen nachtrĂ€gliche Änderungen zu gewĂ€hrleisten, wird ein implizites Hashing der gesamten vorherigen Geschichte in jedem Commit verwendet; es ist auch möglich, digitale Signaturen von Entwicklern fĂŒr bestimmte Tags und Commits zu authentifizieren.

Im Vergleich zur vorherigen Version wurden in die neue Version 494 Änderungen aufgenommen, die von 93 Entwicklern beigetragen wurden, von denen 35 zum ersten Mal an der Entwicklung beteiligt sind. Die wichtigsten Neuerungen sind:

  • Die Möglichkeiten zur Verwendung von SSH-SchlĂŒsseln fĂŒr die digitale Signatur von Git-Objekten wurden erweitert. Um die GĂŒltigkeitsdauer mehrerer SchlĂŒssel zu unterscheiden, wurde die UnterstĂŒtzung fĂŒr die OpenSSH-Direktiven 'valid-before' und 'valid-after' hinzugefĂŒgt, mit denen sichergestellt werden kann, dass die Signaturen nach der Rotation eines SchlĂŒssels eines Entwicklers korrekt funktionieren. Zuvor gab es das Problem, dass die Signaturen mit dem alten und dem neuen SchlĂŒssel nicht getrennt werden konnten — wenn der alte SchlĂŒssel gelöscht wurde, konnte die mit ihm getĂ€tigte Signatur nicht mehr ĂŒberprĂŒft werden, und wenn er behalten wurde, bestand die Möglichkeit, mit dem alten SchlĂŒssel weiterhin neue Signaturen zu erstellen, wĂ€hrend bereits ein neuer SchlĂŒssel vorhanden war. Mit 'valid-before' und 'valid-after' kann der Geltungsbereich der SchlĂŒssel auf Grundlage des Zeitpunkts der Signaturerstellung getrennt werden.
  • In der Einstellung merge.conflictStyle, die es ermöglicht, den Modus zur Darstellung von Konflikten beim Merging auszuwĂ€hlen, wurde die UnterstĂŒtzung fĂŒr den Modus 'zdiff3' eingefĂŒhrt, der alle typischen Zeilen, die zu Beginn oder am Ende eines Konflikts angegeben sind, außerhalb des Konfliktbereichs verschiebt, was eine kompaktere Darstellung der Informationen ermöglicht.
  • In den Befehl „git stash“ wurde der Modus „—staged“ hinzugefĂŒgt, der es ermöglicht, nur Änderungen zu verbergen, die zum Index hinzugefĂŒgt wurden, beispielsweise in Situationen, in denen es notwendig ist, einen Teil komplexer Änderungen vorĂŒbergehend zurĂŒckzustellen, um zunĂ€chst das hinzuzufĂŒgen, was bereits fertig ist, und sich spĂ€ter um den Rest zu kĂŒmmern. Der Modus Ă€hnelt dem Befehl „git commit“, der nur die im Index befindlichen Änderungen aufzeichnet, aber anstelle der Erstellung eines neuen Commits wird das Ergebnis in „git stash —staged“ im temporĂ€ren Bereich stash gespeichert. Nachdem die Änderungen benötigt werden, können sie mit dem Befehl „git stash pop“ wiederhergestellt werden.
  • In den Befehl „git log“ wurde ein neuer Formatbezeichner „—format=%(describe)“ eingefĂŒhrt, der es ermöglicht, die Ausgabe von „git log“ mit dem Ergebnis der AusfĂŒhrung des Befehls „git describe“ zu kombinieren. Die Parameter fĂŒr „git describe“ werden direkt im Bezeichner angegeben („—format=%(describe:match=,exclude=)“), in dem auch verkĂŒrzte Tags („—format=%(describe:tags=)“) inkludiert werden können sowie die Anzahl der hexadezimalen Zeichen zur Identifizierung von Objekten festgelegt werden kann („—format=%(describe:abbrev=)“). Um beispielsweise die letzten 8 Commits auszugeben, deren Tags keinen Release-Kandidaten haben und 8-stellige Identifikatoren angezeigt werden sollen, kann der Befehl verwendet werden: $ git log -8 —format=’%(describe:exclude=*-rc*,abbrev=13)’ v2.34.1-646-gaf4e5f569bc89 v2.34.1-644-g0330edb239c24 v2.33.1-641-g15f002812f858 v2.34.1-643-g2b95d94b056ab v2.34.1-642-gb56bd95bbc8f7 v2.34.1-203-gffb9f2980902d v2.34.1-640-gdf3c41adeb212 v2.34.1-639-g36b65715a4132
  • In der Einstellung user.signingKey wurde die UnterstĂŒtzung neuer SchlĂŒsseltypen implementiert, die nicht auf den Typ „ssh-„ beschrĂ€nkt sind und den vollstĂ€ndigen Dateipfad zum SchlĂŒssel angeben. Alternative Typen werden mit dem PrĂ€fix „key::“ angegeben, beispielsweise „key::ecdsa-sha2-nistp256“ fĂŒr ECDSA-SchlĂŒssel.
  • Die Geschwindigkeit der Generierung von Änderungslisten im Modus „—histogram“ wurde deutlich erhöht, sowie bei Verwendung der Option „—color-moved-ws“, die die Hervorhebung von Leerzeichen im farbigen Diff steuert.
  • Im Befehl „git jump“, der verwendet wird, um Vim Informationen ĂŒber die genauen ÜbergĂ€nge zu einer gesuchten Position in der Datei wĂ€hrend der Analyse von Merge-Konflikten, dem Durchsehen von Unterschieden oder der AusfĂŒhrung einer Suchoperation zu geben, wurde die Möglichkeit zur Eingrenzung des Umfangs der behandelten Merge-Konflikte bereitgestellt. Beispielsweise kann zur EinschrĂ€nkung der Operationen nur auf das Verzeichnis „foo“ angegeben werden: „git jump merge — foo“, und um das Verzeichnis „Documentation“ von der Verarbeitung auszuschließen, kann „git jump merge — ‘:^Documentation'“ angegeben werden.
  • Es wurde eine Standardisierung des Einsatzes des Typs „size_t“ anstelle von „unsigned long“ fĂŒr Werte, die die GrĂ¶ĂŸe von Objekten darstellen, durchgefĂŒhrt. Dies ermöglicht die Anwendung der Filter „clean“ und „smudge“ auf Dateien mit mehr als 4 GB auf allen Plattformen, einschließlich Plattformen mit dem LLP64-Datenmodell, bei dem der Typ „unsigned long“ auf 4 Bytes beschrĂ€nkt ist.
  • Dem Befehl „git am“ wurde die Option „—empty=(stop|drop|keep)“ hinzugefĂŒgt, die es ermöglicht, beim Parsen von Patches aus dem Posteingang das Verhalten fĂŒr leere E-Mails ohne Patches auszuwĂ€hlen. Der Wert „stop“ fĂŒhrt zum Abbruch der gesamten Patch-Anwendung, „drop“ ĂŒberspringt den leeren Patch, „keep“ erstellt einen leeren Commit.
  • Die Befehle „git reset“, „git diff“, „git blame“, „git fetch“, „git pull“ und „git ls-files“ unterstĂŒtzen nun partielle Indizes (sparse index), die die Leistung steigern und Speicherplatz in Repositories sparen, in denen partielle KlonvorgĂ€nge (sparse-checkout) durchgefĂŒhrt werden.
  • Der Befehl „git sparse-checkout init“ wurde als veraltet erklĂ€rt; stattdessen sollte „git sparse-checkout set“ verwendet werden.
  • Eine erste Implementierung eines neuen Backends „reftable“ zum Speichern von Referenzen, wie z. B. Branches und Tags, im Repository wurde hinzugefĂŒgt. Das neue Backend verwendet ein Blockspeichersystem, das von dem Projekt JGit verwendet wird und fĂŒr die Speicherung einer sehr großen Anzahl von Referenzen optimiert ist. Das Backend ist derzeit noch nicht in das Referenzsystem integriert und bereit fĂŒr die praktische Anwendung.
  • Die Farbpalette des Befehls „git grep“ wurde an das GNU grep-Tool angepasst.

Quelle: opennet.ru

60GB SSD 8Gb DDR4