Die neue Version des verteilten Versionskontrollsystems Git 2.38 wurde veröffentlicht. Git gehört zu den beliebtesten, zuverlässigsten und leistungsstärksten Versionskontrollsystemen und bietet flexible Mittel für nichtlineare Entwicklung basierend auf Branching und Merging. Zur Gewährleistung der Integrität der Historie und der Widerstandsfähigkeit gegenüber nachträglichen Änderungen wird in jedem Commit eine implizite Hashbildung der gesamten vorherigen Historie verwendet. Zudem ermöglicht die digitale Signatur von Entwicklern für bestimmte Tags und Commits eine Authentifizierung.
Im Vergleich zur vorherigen Version wurden 699 Änderungen in die neue Version aufgenommen, die von 92 Entwicklern vorbereitet wurden, von denen 24 zum ersten Mal an der Entwicklung teilnahmen. Zu den wichtigsten Neuerungen zählen:
- Im Hauptbestandteil ist das Tool „scalar“ enthalten, das von Microsoft zur Verwaltung großer Repositories entwickelt wurde. Das Tool wurde ursprünglich in C# geschrieben, aber eine umgearbeitete Version in C wurde in Git integriert. Die neue Anwendung unterscheidet sich von den Git-Befehlen, indem sie standardmäßig zusätzliche Funktionen und Einstellungen bietet, die die Leistung beim Arbeiten mit sehr großen Repositories verbessern. Zum Beispiel wird bei der Verwendung von scalar Folgendes angewendet:
- Teilweises Klonen für die Arbeit mit einer unvollständigen Kopie des Repositories.
- Ein integrierter Mechanismus zur Überwachung von Änderungen im Dateisystem (FSMonitor), der es ermöglicht, auf eine vollständige Durchsuchung des Arbeitsverzeichnisses zu verzichten.
- Indizes, die Objekte in verschiedenen Pack-Dateien abdecken (Multi-Pack).
- Commit-Graph-Dateien mit einem Index des Commit-Graphs, der zur Optimierung des Zugriffs auf Informationen über Commits verwendet wird.
- Hintergrundarbeiten zur Aufrechterhaltung der optimalen Struktur des Repositories im Hintergrund, ohne die interaktive Sitzung zu blockieren (jede Stunde wird eine Aufgabe zur proaktiven загрузке neuer Objekte aus dem entfernten Repository sowie zur Aktualisierung der Commit-Grafdatei ausgeführt, während jede Nacht ein Verpackungsprozess für das Repository startet).
- Der Modus „sparseCheckoutCone“, der die zulässigen Muster beim partiellen Klonen einschränkt.
- Der Befehl „git rebase“ wurde um die Option „—update-refs“ ergänzt, um abhängige Branches, die sich mit den verschobenen Branches überschneiden, zu aktualisieren, damit keine manuelle Checkout-Operation für jeden abhängigen Branch erforderlich ist, um auf den gewünschten Commit zu wechseln.
- Die Kompatibilität des Befehls „git rm“ mit teilweisen Indizes wurde gewährleistet.
- Das Verhalten des Befehls „git mv A B“ wurde verbessert, wenn eine Datei aus dem Arbeitsverzeichnis mit teilweisen Indizes im „cone“-Modus in einen externen Bereich verschoben wird, für den dieser Modus nicht gilt.
- Das Format der Bitmap-Dateien für die Arbeit mit großen Repositories wurde optimiert — eine optionale Indextabelle mit einer Liste der ausgewählten Commits und deren Offsets wurde hinzugefügt.
- Im Befehl „git merge-tree“ wurde ein neuer Modus implementiert, bei dem auf Basis von zwei angegebenen Commits ein Baum mit dem Ergebnis des Zusammenführens berechnet wird, als wären die Historien dieser Commits zusammengeführt worden.
- Es wurde die Einstellung „safe.barerepository“ hinzugefügt, um die Möglichkeit der Ablage von Bare-Repositories (Repositories, die keinen Arbeitsbaum enthalten) innerhalb anderer Git-Repositories zu steuern. Bei der Einstellung auf „explicit“ ist die Arbeit mit Bare-Repositories, die nur im obersten Verzeichnis abgelegt sind, erlaubt. Um Bare-Repositories auch in Unterverzeichnissen ablegen zu können, sollte der Wert „all“ verwendet werden.
- Im Befehl „git grep“ wurde die Option „-m“ („—max-count“) hinzugefügt, die der gleichnamigen Option in GNU grep entspricht und es ermöglicht, die Anzahl der ausgegebenen Übereinstimmungen zu begrenzen.
- Im Befehl „ls-files“ wurde die Option „—format“ implementiert, um die ausgegebenen Felder anzupassen (zum Beispiel kann der Ausgabename des Objekts, Berechtigungen usw. einbezogen werden).
- In „git cat-file“ wurde bei der Anzeige des Inhalts von Objekten die Möglichkeit implementiert, die Zuordnungen der Autoren zu E-Mail-Adressen zu berücksichtigen, die in der Datei mailmap festgelegt sind.
Quelle: opennet.ru
