Das System zur Verwaltung von Quelltexten Git 2.41 ist verfĂŒgbar

Nach drei Monaten Entwicklung wurde die Veröffentlichung des verteilten Systems zur Verwaltung von Quelltexten Git 2.41 bekannt gegeben. Git ist eines der beliebtesten, zuverlĂ€ssigsten und leistungsstĂ€rksten Versionsverwaltungssysteme, das flexible Mittel fĂŒr nichtlineare Entwicklungen basierend auf Branching und Merging bereitstellt. Um die IntegritĂ€t der Historie und die WiderstandsfĂ€higkeit gegenĂŒber rĂŒckwirkenden Änderungen zu gewĂ€hrleisten, wird eine implizite Hash-Wertung der gesamten vorhergehenden Historie in jedem Commit verwendet. Zudem ist es möglich, digitale Signaturen von Entwicklern fĂŒr einzelne Tags und Commits beizufĂŒgen.

Im Vergleich zur vorherigen Version wurden in die neue Version 542 Änderungen ĂŒbernommen, die von 95 Entwicklern vorbereitet wurden, von denen 29 erstmals an der Entwicklung teilnahmen. Die Hauptneuerungen sind:

  • Die Verarbeitung von unerreichbaren Objekten wurde verbessert, auf die im Repository keine Verweise (keine Branches oder Tags) existieren. Unerreichbare Objekte werden vom Garbage Collector gelöscht, verbleiben jedoch eine gewisse Zeit im Repository, um RennzustĂ€nde zu vermeiden. Um die Verweildauer unerreichbarer Objekte zu verfolgen, mĂŒssen Labels mit Zeitstempeln fĂŒr diese Objekte zugeordnet werden, was es nicht erlaubt, sie in einer einzigen Pack-Datei zu speichern, in der alle Objekte eine gemeinsame Änderungszeit haben. FrĂŒher wurde jedes unerreichbare Objekt in einer separaten Datei gespeichert, was bei zahlreichen frischen unerreichbaren Objekten, die noch nicht gelöscht werden sollten, zu Problemen fĂŒhrte. In der neuen Version wird standardmĂ€ĂŸig der Mechanismus „cruft packs“ zum Packen unerreichbarer Objekte verwendet, der es ermöglicht, alle unerreichbaren Objekte in einer einzigen Pack-Datei zu speichern, wĂ€hrend die Informationen ĂŒber die Änderungszeit jedes Objekts in einer separaten Tabelle gespeichert werden, die sich in einer Datei mit der Erweiterung „.mtimes“ befindet und ĂŒber eine Indexdatei mit der Erweiterung „.idx“ verknĂŒpft ist.
    Das System zur Verwaltung von Quelltexten Git 2.41 ist verfĂŒgbar
  • StandardmĂ€ĂŸig ist die Verwendung des RĂŒckwĂ€rtsindex (revindex) fĂŒr Pack-Dateien aktiviert. Bei Tests im Repository torvalds/linux ermöglichte die Anwendung des RĂŒckwĂ€rtsindex eine 1,49-fache Beschleunigung ressourcenintensiver „git push“-Operationen sowie eine 77-fache Beschleunigung einfacher Operationen, wie das Berechnen der GrĂ¶ĂŸe eines Objekts mittels „git cat-file —batch=’%(objectsize:disk)'“. Dateien („.rev“) mit RĂŒckwĂ€rtsindex werden im Repository im Verzeichnis „.git/objects/pack“ gespeichert.

    Erinnern wir uns daran, dass Git alle Daten in Form von Objekten speichert, die in separaten Dateien abgelegt werden. Um die Effizienz der Arbeit mit dem Repository zu erhöhen, werden die Objekte zusĂ€tzlich in Pack-Dateien abgelegt, in denen die Informationen in Form eines Stroms von aufeinanderfolgenden Objekten dargestellt werden (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 Offsets in der Pack-Datei zu bestimmen, wo dieses Objekt gespeichert ist.

    Der im neuen Release enthaltene RĂŒckwĂ€rtsindex zielt darauf ab, den Prozess der Identifizierung der Objekt-ID anhand der Informationen ĂŒber die Platzierung des Objekts in der Pack-Datei zu optimieren. Zuvor wurde eine solche Umwandlung wĂ€hrend der Analyse der Pack-Datei in Echtzeit durchgefĂŒhrt und nur im Speicher gehalten, was die Wiederverwendbarkeit solcher Indizes verhinderte und es erforderte, den Index jedes Mal neu zu generieren. Der Vorgang zum Erstellen des Indexes reduziert sich auf den Aufbau eines Arrays von „Objekt-Position“-Paaren und deren Sortierung nach Position, was bei großen Pack-Dateien viel Zeit in Anspruch nehmen kann.

    Zum Beispiel wurde die Ausgabe des Inhalts von Objekten, bei der ein direkter Index verwendet wurde, 62-mal schneller durchgefĂŒhrt als die Anzeige der GrĂ¶ĂŸe von Objekten, fĂŒr die die Daten zur Beziehung zwischen Position und Objekt nicht indiziert wurden. Nach der Verwendung des RĂŒckwĂ€rtsindex benötigten die genannten Operationen etwa die gleiche Zeit. RĂŒckwĂ€rtsindizes ermöglichen es auch, die VorgĂ€nge beim Senden von Objekten bei den Befehlen fetch und push durch die direkte Übertragung bereits bereitgestellter Daten von der Festplatte zu beschleunigen.

    Das System zur Verwaltung von Quelltexten Git 2.41 ist verfĂŒgbar
  • Im Protokoll „Credential Helper“, das fĂŒr die Übertragung von Zugangsdaten beim Zugriff auf Repositories mit eingeschrĂ€nktem Zugriff verwendet wird, wurde die UnterstĂŒtzung fĂŒr die Übertragung von WWW-Authenticate-Headern zwischen dem Credential Handler und dem Dienst, wo die Authentifizierung erfolgt, hinzugefĂŒgt. Die UnterstĂŒtzung des WWW-Authenticate-Headers ermöglicht die Übertragung von OAuth-Scoped Parametern fĂŒr eine granularere Zugriffskontrolle des Benutzers auf die Repositories und die Abgrenzung von Bereichen, die fĂŒr Anfragen verfĂŒgbar sind.
  • In den Befehl for-each-ref wurde eine Formatierungsoption „%(ahead-behind:<base>)“ hinzugefĂŒgt, die es ermöglicht, auf einmal Informationen ĂŒber die Anzahl von Commits zu erhalten, die in einem bestimmten Branch vorhanden oder nicht vorhanden sind, im Vergleich zu einem anderen Branch (wie weit einer Branch hinter oder vor einem anderen in Bezug auf die Commits liegt). Zuvor mussten fĂŒr derartige Informationen zwei separate Befehle ausgefĂŒhrt werden: „git rev-list —count main..my-feature“ zur Ermittlung der Branch-spezifischen Commits und „git rev-list —count my-feature..main“ zur Ermittlung der fehlenden Commits. Jetzt können derartige Berechnungen auf einen einzigen Befehl reduziert werden, was das Schreiben von Handlern vereinfacht und die AusfĂŒhrungszeit verkĂŒrzt. Zum Beispiel kann fĂŒr die Anzeige von nicht zusammengefĂŒhrten Branches und zur EinschĂ€tzung der Verzögerung oder Vorlaufzeit im Vergleich zum Hauptbranch eine Einzeiler verwendet werden: $ git for-each-ref —no-merged=origin/HEAD \ —format=’%(refname:short) %(ahead-behind:origin/HEAD)’ \ refs/heads/tb/ | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref—exclude 16 96 tb/roaring-bitmaps 47 3 anstelle des zuvor verwendeten Skripts, das 17-mal langsamer ausgefĂŒhrt wird: $ git for-each-ref —format=’%(refname:short)’ —no-merged=origin/HEAD \ refs/heads/tb | while read ref do ahead=„$(git rev-list —count origin/HEAD..$ref)“ behind=„$(git rev-list —count $ref..origin/HEAD)“ printf „%s %d %d\n“ „$ref“ „$ahead“ „$behind“ done | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref—exclude 16 96 tb/roaring-bitmaps 47 3
  • In den Befehl „git fetch“ wurde die Option „—porcelain“ hinzugefĂŒgt, bei deren Angabe die Ausgabe im Format „<flag> <old-object-id> <new-object-id> <local-reference>“ erstellt wird, das weniger lesbar, aber besser fĂŒr die Verarbeitung in Skripten geeignet ist.
  • Eine Einstellung „fetch.hideRefs“ wurde hinzugefĂŒgt, die die „git fetch“-Operationen beschleunigt, indem sie einen Teil der Links im lokalen Repository wĂ€hrend der ÜberprĂŒfung auf den vollstĂ€ndigen Satz von Objekten auf Serverseite verbirgt, was Zeit spart, indem die ÜberprĂŒfung eingeschrĂ€nkt wird. Server, von denen Daten direkt abgerufen werden. Zum Beispiel hat bei einem Test auf einem System mit Repositories, die eine große Anzahl an verfolgten externen Links enthalten, das Ausschließen aller Links außer den an das Ziel adressierten zu einem Server $remote, die AusfĂŒhrungszeit des Befehls „git fetch“ von 20 Minuten auf 30 Sekunden verkĂŒrzt. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • Im Befehl „git fsck“ wurde die Möglichkeit implementiert, BeschĂ€digungen, die Übereinstimmung von PrĂŒfziffern und die Korrektheit der Werte in den VerfĂŒgbarkeits-Bitkarten und RĂŒckwĂ€rtsindizes zu ĂŒberprĂŒfen.
  • Im Befehl „git clone —local“ wurde eine Fehlermeldung implementiert, die beim Versuch, aus einem Repository mit symbolischen Links innerhalb von $GIT_DIR zu kopieren, ausgegeben wird.

Quelle: opennet.ru

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster