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
