Nach zwei Monaten der Entwicklung wurde die Veröffentlichung des verteilten Systems zur Verwaltung von Quelltexten Git 2.39 abgeschlossen. Git ist eines der beliebtesten, zuverlĂ€ssigsten und leistungsfĂ€higsten Versionskontrollsysteme, das flexible Mittel fĂŒr die nichtlineare Entwicklung bietet, die auf Branching und Merging basieren. Um die IntegritĂ€t der Historie und die WiderstandsfĂ€higkeit gegen rĂŒckwirkende Ănderungen sicherzustellen, wird ein implizites Hashing der gesamten vorherigen Historie in jedem Commit verwendet, auĂerdem ist es möglich, digitale Signaturen von Entwicklern fĂŒr einzelne Tags und Commits zu verifizieren.
Im Vergleich zur vorherigen Version wurden in die neue Version 483 Ănderungen aufgenommen, die mit Beteiligung von 86 Entwicklern vorbereitet wurden, von denen 31 zum ersten Mal an der Entwicklung teilnahmen. Die wichtigsten Neuerungen:
- In das Kommando âgit shortlogâ, das fĂŒr die Anzeige von Zusammenfassungen mit Statistiken aus der Ănderungsdauer gedacht ist, wurde die Option ââgroupâ fĂŒr eine beliebige Gruppierung von Commits nach Feldern hinzugefĂŒgt, die nicht auf Autor oder Committer beschrĂ€nkt sind. Zum Beispiel kann der Befehl verwendet werden, um eine Liste von Entwicklern mit Informationen ĂŒber die Anzahl der Ănderungen zu zeigen, einschlieĂlich der Mitwirkenden, die im Feld âCo-authored-byâ erwĂ€hnt werden: git shortlog -ns âgroup=author âgroup=trailer:co-authored-by
Die Ausgabe von shortlog kann durch Formatierungsspezifizierer aggregiert werden, und die Option ââgroupâ erleichtert erheblich die Erstellung komplexer Berichte und die Vermeidung zusĂ€tzlicher Sortierbefehle. Beispielsweise kann man zur Erstellung eines Berichts darĂŒber, wie viele Commits fĂŒr einen bestimmten Release in jedem Monat akzeptiert wurden, folgendes angeben: git shortlog v2.38.0.. âdate=âformat:%Y-%mâ âgroup=ââ -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 FrĂŒher hĂ€tte man fĂŒr die DurchfĂŒhrung einer Ă€hnlichen Operation die Tools sort und uniq benötigt: git log v2.38.0.. âdate=âformat:%Y-%mâ âformat=ââ | sort | uniq -c
- Die Möglichkeiten des Mechanismus âcruft packsâ wurden erweitert, der zum Verpacken unerreichbarer Objekte bestimmt ist, auf die im Repository keine Links vorhanden sind (keine Verweisen wie Branches oder Tags). Unerreichbare Objekte werden vom Garbage Collector entfernt, verbleiben jedoch fĂŒr eine bestimmte Zeit im Repository, um Rennbedingungen zu vermeiden. Der Mechanismus âcruft packsâ ermöglicht das Speichern aller unerreichbaren Objekte in einer einzigen Pack-Datei, wĂ€hrend die Daten ĂŒber die Modifikationszeit jedes Objekts in einer separaten Tabelle, die in einer separaten Datei mit der Erweiterung â.mtimesâ gespeichert wird, reflektiert werden, um Ăberschneidungen mit der allgemeinen Ănderungszeit zu vermeiden.
Die Zeit, die unerreichbare Objekte im Repository verbleiben, bevor sie tatsĂ€chlich gelöscht werden, wird durch die Option ââprune=<date>â bestimmt. Obwohl die Verzögerung vor der Löschung eine recht effektive und praktische Methode zur Vermeidung von Repository-BeschĂ€digungen aufgrund von Rennbedingungen ist, ist sie nicht zu 100 % zuverlĂ€ssig. Um die Wiederherstellung eines beschĂ€digten Repositories zu erleichtern, wurde in der neuen Version die Möglichkeit eingefĂŒhrt, fehlende Objekte zu speichern. Dazu wurde der Befehl âgit repackâ um die Option ââexpire-toâ erweitert, die es ermöglicht, eine Datei anzugeben, um eine externe Kopie aller gelöschten Objekte zu erstellen. Zum Beispiel kann der Befehl verwendet werden, um unerreichbare Objekte, die sich in den letzten 5 Minuten nicht geĂ€ndert haben, in der Datei backup.git zu speichern: git repack âcruft âcruft-expiration=5.minutes.ago -d âexpire-to=..\/backup.git
- Die Geschwindigkeit der DurchfĂŒhrung der Operation âgit grep âcachedâ wurde signifikant erhöht (um bis zu 70 %), wenn in Bereichen gesucht wird, in denen partielle Klonungen (sparse-checkout) angewendet werden und fĂŒr die partielle Indizes (sparse index) existieren. FrĂŒher wurde bei Angabe der Option ââcachedâ zunĂ€chst im normalen Index gesucht, bevor in den partiellen Indizes gesucht wurde, was zu spĂŒrbaren Verzögerungen bei der Suche in groĂen Repositories fĂŒhrte.
- Die AusfĂŒhrungsgeschwindigkeit wurde beschleunigt bei Server den ĂberprĂŒfungen der Konsistenz neuer Objekte, bevor sie beim DurchfĂŒhren der Operation âgit pushâ in das Repository eingefĂŒgt werden. Durch den Wechsel zu einer ĂberprĂŒfung, die nur die deklarierten Verweise berĂŒcksichtigt, konnten in einem Test-Repository mit 7 Millionen Verweisen, von denen nur 3 % durch die Push-Operation erfasst wurden, die vorgenommenen Optimierungen die ĂberprĂŒfungszeit um das 4,5-Fache reduzieren.
- Zum Schutz vor potenziellen GanzzahlĂŒberlĂ€ufen im Code ist in dem Befehl "git apply" die maximale GröĂe der verarbeiteten Patches begrenzt. Wenn die GröĂe des Patches 1 GB ĂŒberschreitet, wird nun eine Fehlermeldung angezeigt.
- Zum Schutz vor potenziellen SicherheitsanfĂ€lligkeiten wurden Ănderungen vorgenommen, um ĂŒberflĂŒssige Informationen aus den Headern zu bereinigen, die beim Einsatz des Moduls h2h3 mit den Optionen GIT_TRACE_CURL=1 oder GIT_CURL_VERBOSE=1 zusammen mit HTTP/2 ausgegeben werden.
- Beim AusfĂŒhren des Checkout-Vorgangs mit einem Branch, der ein symbolischer Verweis auf einen anderen Branch ist, gibt der Befehl "git symbolic-ref HEAD" nun den Namen des Zielbranches aus und nicht den Namen des symbolischen Verweises.
- UnterstĂŒtzung fĂŒr das Argument @{-1} in der Option "âedit-description" ("git branch âedit-description @{-1}") zum Bearbeiten der Beschreibung des vorherigen Branches wurde hinzugefĂŒgt.
- Der Befehl "git merge-tree âstdin" wurde hinzugefĂŒgt, der es ermöglicht, eine Liste von Parametern ĂŒber den Standard-Eingabestrom zu ĂŒbergeben.
- In Netzwerkdateisystemen ist standardmĂ€Ăig der fsmonitor-Handler deaktiviert, der Ănderungen im Dateisystem verfolgt.
Quelle: opennet.ru
