Die neue Version des verteilten Versionskontrollsystems Git 2.31 ist jetzt verfĂŒgbar. Git ist eines der beliebtesten, zuverlĂ€ssigsten und leistungsstĂ€rksten Versionskontrollsysteme und bietet flexible, nichtlineare Entwicklungsmöglichkeiten, die auf Branching und Merging basieren. Um die IntegritĂ€t der Historie zu gewĂ€hrleisten und die WiderstandsfĂ€higkeit gegen nachtrĂ€gliche Ănderungen zu gewĂ€hrleisten, kommt eine implizite Hashierung der gesamten vorherigen Historie in jedem Commit zum Einsatz; auĂerdem ist die digitale Signatur von Entwicklern fĂŒr bestimmte Tags und Commits möglich.
Im Vergleich zur vorherigen Version wurden 679 Ănderungen ĂŒbernommen, an denen 85 Entwickler beteiligt waren, von denen 23 erstmals an der Entwicklung mitwirkten. Zu den wichtigsten Neuerungen gehören:
- Der Befehl »git maintenance« wurde hinzugefĂŒgt, um regelmĂ€Ăige Aufgaben auf Systemen auszufĂŒhren, die cron nicht unterstĂŒtzen. Mit diesem neuen Befehl können Sie beispielsweise einen regelmĂ€Ăigen Prozess zur Archivierung des Repositories einrichten, ohne darauf warten zu mĂŒssen, dass die Sperre des Repositories beim automatischen Archivieren wĂ€hrend der AusfĂŒhrung verschiedener Befehle abgeschlossen ist. Der Befehl »git maintenance« ermöglicht es, Optimierungen und Wartungsoperationen zur Aufrechterhaltung der optimalen Struktur des Repositories im Hintergrund auszufĂŒhren, ohne die interaktive Sitzung zu blockieren â jede Stunde wird eine Aufgabe zur proaktiven Abholung neuer Objekte aus dem Remote-Repository und zur Aktualisierung der Commits-Grafdatei ausgefĂŒhrt, und jede Nacht wird der Prozess zur Archivierung des Repositories gestartet.
- Die UnterstĂŒtzung fĂŒr die Erstellung von umgekehrten Indizes (revindex) fĂŒr Pack-Dateien wurde hinzugefĂŒgt. Wie bereits erwĂ€hnt, speichert Git alle Daten in Form von Objekten, die in separaten Dateien abgelegt werden. Um die Effizienz der Arbeit mit einem Repository zu erhöhen, werden Objekte zusĂ€tzlich in Pack-Dateien gespeichert, in denen die Informationen in Form eines Streams von aufeinanderfolgenden Objekten dargestellt sind (ein Ă€hnliches Format wird beim Ăbertragen von Objekten mit den Befehlen git fetch und git push verwendet). FĂŒr jede Pack-Datei wird eine Indexdatei (.idx) erstellt, die es ermöglicht, anhand der Objekt-ID sehr schnell die Offset-Position in der Pack-Datei zu bestimmen, an der sich dieses Objekt befindet. Der in Git 2.31 eingefĂŒhrte umgekehrte Index (.rev) zielt darauf ab, den Prozess der Identifizierung der Objekt-ID anhand der Informationen ĂŒber die Platzierung des Objekts in der Pack-Datei zu optimieren.
FrĂŒher wurde eine solche Umwandlung zur Laufzeit beim Parsen der Pack-Datei durchgefĂŒhrt und nur im Speicher gehalten, was eine Wiederverwendung solcher Indizes verhinderte und die Erstellung des Indizes jedes Mal erforderte. Der Vorgang zur Erstellung des Indexes besteht darin, ein Array aus Objekt-Position-Paaren zu erstellen und es nach Position zu sortieren, was bei groĂen Pack-Dateien viel Zeit in Anspruch nehmen kann.
Zum Beispiel wurde der Vorgang zur Ausgabe des Inhalts von Objekten, bei dem ein direkter Index verwendet wird, 62-mal schneller ausgefĂŒhrt als der Vorgang zur Anzeige der GröĂe von Objekten, fĂŒr den die Daten ĂŒber die Beziehung zwischen Position und Objekt nicht indiziert wurden. Nach der Verwendung des umgekehrten Indexes benötigten diese VorgĂ€nge ungefĂ€hr die gleiche Zeit. Umgekehrte Indizes ermöglichen auch eine schnellere DurchfĂŒhrung der Ăbertragungsoperationen von Objekten bei der AusfĂŒhrung der Befehle fetch und push durch die direkte Ăbertragung bereits vorbereiteter Daten von der Festplatte. StandardmĂ€Ăig werden umgekehrte Indizes nicht erstellt; um sie zu generieren, muss die Einstellung âgit config pack.writeReverseIndex trueâ aktiviert werden, gefolgt von der Verpackung des Repositories mit dem Befehl âgit repack -Adâ.
- Leistungsoptimierungen wurden hinzugefĂŒgt, die auf dem commit-graph-Dateiformat basieren, das zur Optimierung des Zugriffs auf Commit-Informationen verwendet wird. Neue Daten zur Commit-Generierung ermöglichen es, zusĂ€tzliche Operationen mit Commits zu beschleunigen.
- Die Möglichkeit, den Namen des Standard-Hauptzweigs, der in neuen Repositories verwendet wird (Einstellung init.defaultBranch), zu ĂŒberschreiben, wurde ergĂ€nzt. Wenn auf externe Repositories zugegriffen wird, versucht Git, den Branch abzurufen, auf den HEAD zeigt. Das bedeutet, wenn ein externes der Server Repository standardmĂ€Ăig den Branch âmainâ verwendet, wird die Operation âgit cloneâ versuchen, âmainâ lokal abzurufen. In Git 2.31 wird die UnterstĂŒtzung fĂŒr ein Ă€hnliches Abrufen nun auch fĂŒr leere Repositories realisiert. Beispielsweise wird beim lokalen Klonen eines neuen Repositories, bevor die ersten Patches hinzugefĂŒgt werden, die lokale Kopie nun den Server Standard-Hauptbranchnamen enthalten.
- Dem Befehl âgit rev-listâ wurde die Option ââdisk-usageâ hinzugefĂŒgt, um eine Zusammenfassung der ObjektgröĂen anzuzeigen.
- In Erwartung des bevorstehenden Backend-Austauschs zur DurchfĂŒhrung von ZusammenfĂŒhrungen wurde die Erkennung von Umbenennungen erheblich optimiert.
- Die UnterstĂŒtzung der veralteten PCRE1-Bibliothek fĂŒr regulĂ€re AusdrĂŒcke wurde eingestellt.
- Die Möglichkeit, die Verwendung von verkĂŒrzten Links zu erzwingen, wurde bereitgestellt, unabhĂ€ngig vom Hash-Algorithmus. Das Verbot wird aktiviert, indem der Parameter core.abbrev der Wert "no" zugewiesen wird.
- Der Befehl âgit rev-parseâ hat die Option ââpath-format=(absolute|relative)â erhalten, um die Ausgabe von relativen oder absoluten Pfaden explizit zu definieren.
- In den Skripten fĂŒr die automatische VervollstĂ€ndigung in Bash wurde die HinzufĂŒgung von VervollstĂ€ndigungsregeln fĂŒr eigene âgitâ-Unterbefehle vereinfacht.
- Der Befehl âgit bundleâ hat die Option ââstdinâ erhalten, um Links aus dem Standard-Eingabestrom zu lesen.
- Der Befehl âgit logâ hat eine neue Option ââdiff-merges=â erhalten.
- Der Befehl âgit ls-filesâ hat die Option ââdeduplicatecanâ erhalten, um Duplikate bei der Ausgabe zu entfernen.
- Neue Muster zum AusschlieĂen von Commit-Bereichen wurden hinzugefĂŒgt â â^!â und â^-â.
- Der Befehl âgit range-diffâ hat die Optionen ââleft-onlyâ und ââright-onlyâ erhalten, um nur eine Seite des verglichenen Bereichs anzuzeigen.
- Die Befehle âgit diffâ und âgit logâ wurden um die Optionen ââskip-to=â und âârotate-to=â erweitert, um die Anfangspfade zu ĂŒberspringen oder ans Ende zu verschieben.
- Der Befehl âgit difftoolâ hat die Option ââskip-to=â erhalten, um eine unterbrochene Sitzung von einem beliebigen Pfad aus fortzusetzen.
- Der Verhaltenskodex (Code of Conduct), der die grundlegenden Prinzipien zur Lösung von Konfliktsituationen zwischen Entwicklern festlegt, wurde auf Version 2.0 aktualisiert (zuvor wurde Version 1.4 verwendet).
Quelle: opennet.ru
