Veröffentlichung des verteilten Versionskontrollsystems Git 2.31

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
Erwerben Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster