Git 2.37 Version der Quellcodeverwaltung

Die Veröffentlichung des verteilten Versionsverwaltungssystems Git 2.37 wurde angekündigt. Git ist eines der beliebtesten, zuverlässigsten und leistungsstärksten Versionskontrollsysteme und bietet flexible nichtlineare Entwicklungstools basierend auf Verzweigung und Zusammenführung. Um die Integrität des Verlaufs und die Widerstandsfähigkeit gegen rückwirkende Änderungen sicherzustellen, wird in jedem Commit ein implizites Hashing des gesamten vorherigen Verlaufs verwendet; es ist auch möglich, einzelne Tags und Commits mit digitalen Signaturen der Entwickler zu zertifizieren.

Im Vergleich zur Vorgängerversion wurden 395 Änderungen in die neue Version übernommen, die unter Beteiligung von 75 Entwicklern erstellt wurde, von denen 20 erstmals an der Entwicklung beteiligt waren. Wichtigste Neuerungen:

  • Der Mechanismus der Teilindizes (Sparse Index), der nur einen Teil des Repositorys abdeckt, wurde für den breiten Einsatz entwickelt. Teilindizes können die Leistung verbessern und Platz in Repositorys sparen, die teilweise Klonvorgänge (Sparse-Checkout) durchführen oder mit einer unvollständigen Kopie des Repositorys arbeiten. Die neue Version vervollständigt die Integration von Teilindizes in die Befehle git show, git sparse-checkout und git stash. Der deutlichste Leistungsvorteil durch die Verwendung von Teilindizes ist beim Befehl git stash zu beobachten, der in einigen Situationen eine Steigerung der Ausführungsgeschwindigkeit um 80 % verzeichnete.
  • Es wurde ein neuer „Cruft Packs“-Mechanismus implementiert, um nicht erreichbare Objekte zu packen, auf die im Repository nicht verwiesen wird (die nicht durch Zweige oder Tags referenziert werden). Nicht erreichbare Objekte werden vom Garbage Collector gelöscht, verbleiben jedoch eine bestimmte Zeit im Repository, bevor sie gelöscht werden, um Race Conditions zu vermeiden. Um den Zeitraum des Auftretens nicht erreichbarer Objekte zu verfolgen, ist es notwendig, ihnen Tags mit der Änderungszeit ähnlicher Objekte hinzuzufügen, was es nicht ermöglicht, sie in einer Paketdatei zu speichern, in der alle Objekte eine gemeinsame Änderungszeit haben. Bisher führte das Speichern jedes Objekts in einer separaten Datei zu Problemen, wenn eine große Anzahl neuer, nicht erreichbarer Objekte vorhanden war, die noch nicht gelöscht werden konnten. Mit dem vorgeschlagenen „Cruft Packs“-Mechanismus können Sie alle nicht erreichbaren Objekte in einer Packdatei speichern und Daten zur Änderungszeit jedes Objekts in einer separaten Tabelle wiedergeben, die in einer Datei mit der Erweiterung „.mtimes“ gespeichert ist.
  • Für Windows und macOS gibt es einen integrierten Mechanismus zum Verfolgen von Änderungen am Dateisystem, der es Ihnen ermöglicht, bei der Ausführung von Vorgängen wie „git status“ die Iteration über das gesamte Arbeitsverzeichnis zu vermeiden. Um Änderungen zu verfolgen, konnten bisher externe Dienstprogramme zur Verfolgung von Änderungen im FS, wie z. B. Watchman, über Hooks angeschlossen werden, was jedoch die Installation zusätzlicher Programme und Konfigurationen erforderte. Nun ist die angegebene Funktionalität integriert und kann mit dem Befehl „git config core.fsmonitor true“ aktiviert werden.
  • Im Befehl „git sparse-checkout“ wurde die Unterstützung einer Alternative zum „—cone“-Modus, der Methode zum Definieren von Vorlagen für das teilweise Klonen, für veraltet erklärt, was es ermöglicht, den Teil des Repositorys zu bestimmen, der betroffen ist Beim Klonvorgang werden einzelne Dateien mithilfe der „.gitignore“-Syntax aufgelistet, die die Verwendung von Teilindizes zur Optimierung nicht zulässt.
  • Erhöhte Flexibilität bei der Konfiguration des fsync()-Aufrufs zum Flushen von Änderungen auf die Festplatte. Dem Parameter „core.fsyncMethod“ wurde Unterstützung für die „Batch“-Synchronisationsstrategie hinzugefügt, die eine Beschleunigung der Arbeit beim Schreiben einer großen Anzahl einzelner Dateien ermöglicht, indem Änderungen im Writeback-Cache akkumuliert werden, der durch einen einzigen fsync() zurückgesetzt wird. Anruf. Der Test, der dazu führte, dass 500 Dateien mit dem Befehl „git add“ hinzugefügt wurden, wurde bei Aktivierung des neuen Modus in 0.15 Sekunden abgeschlossen, während der Aufruf von fsync() für jede Datei 1.88 Sekunden dauerte und ohne Verwendung von fsync 0.06 Sekunden.
  • Branch-Traversal-Befehle wie „git log“ und „git rev-list“ verfügen jetzt über die Option „-since-as-filter=X“, mit der Sie Informationen über Commits herausfiltern können, die älter als „X“ sind. Im Gegensatz zur Option „—since“ wird der neue Befehl als Filter implementiert, der die Suche nicht nach dem ersten Commit stoppt, der älter als die angegebene Zeit ist.
  • Im Befehl „git remote“ werden bei Angabe des Flags „-v“ Informationen zu Teilklonen des Repositorys angezeigt.
  • Einstellung „transfer.credentialsInUrl“ hinzugefügt, die die Werte „warn“, „die“ und „allow“ annehmen kann. Wenn im Parameter „remote. .url“-Klartext-Anmeldeinformationen verwenden, schlägt der Versuch, einen „Abruf“- oder „Push“-Vorgang durchzuführen, mit einem Fehler fehl, wenn die Einstellung „transfer.credentialsInUrl“ auf „die“ gesetzt ist, oder mit einer Warnung, wenn sie auf „warn“ gesetzt ist.
  • Standardmäßig ist die neue Implementierung des interaktiven Modus des von Perl nach C umgeschriebenen Befehls „git add -i“ aktiviert.

Source: opennet.ru

Kommentar hinzufügen