Veröffentlichung des verteilten Systems zur Verwaltung von Quelltexten . Git ist eines der beliebtesten, zuverlĂ€ssigsten und leistungsstĂ€rksten Versionskontrollsysteme, das flexible Werkzeuge fĂŒr die nichtlineare Entwicklung bietet, basierend auf Abzweigung und ZusammenfĂŒhrung von Zweigen. Um die IntegritĂ€t der Historie und die WiderstandsfĂ€higkeit gegen nachtrĂ€gliche Ănderungen zu gewĂ€hrleisten, wird eine implizite Hashierung der gesamten vorherigen Historie in jedem Commit verwendet, auch die Authentifizierung von digitalen Signaturen der Entwickler fĂŒr bestimmte Tags und Commits ist möglich.
Im Vergleich zur vorherigen Version wurden in die neue Version 745 Ănderungen aufgenommen, die mit Beteiligung von 74 Entwicklern vorbereitet wurden, von denen 18 erstmals an der Entwicklung teilnahmen. :
- Der ab Version 1.18 verfĂŒgbare neue Ăbertragungsmodus fĂŒr das Commit-Set âgit rebase ârebase-mergesâ hat die alte Option ââpreserve-mergesâ ersetzt, die jetzt als veraltet gilt. Der Befehl âgit rebaseâ wird verwendet, um eine Serie von Commits durch einen neuen Basis-Commit zu ersetzen, beispielsweise um einen bestimmten Branch, in dem eine neue Funktion entwickelt wird, auf den aktuellen Stand des Master-Branches zu verschieben, der Korrekturen enthĂ€lt, die nach der Abzweigung hinzugefĂŒgt wurden:
o â o â o (my-feature)
/
o â o â o â o â o (master)
o â o â o (my-feature)
/
o â o â o â o â o (master)
Um die Struktur der Branches im ĂŒbertragbaren Branch zu erhalten, konnte zuvor die Option ââpreserve-mergesâ verwendet werden, die im interaktiven Modus (git rebase -i âpreserve-merges) das Bearbeiten der Commit-Historie erlaubte, jedoch keine vollstĂ€ndige Beibehaltung der Struktur des Repositories garantierte. Der neuerliche Modus âârebase-mergesâ ermöglicht es, die Struktur der Ănderungen im ĂŒbertragbaren Branch beizubehalten und bietet gleichzeitig eine vollstĂ€ndige Reihe interaktiver Operationen, einschlieĂlich Löschen, Umgruppieren und Umbenennen von Commits.
Zum Beispiel âârebase-mergesâ Commits aus einem einzelnen Branch auf einen neueren Master-Branch zu ĂŒbertragen, dabei die Struktur der Branches im ĂŒbertragbaren Branch zu bewahren und gleichzeitig einige Ănderungen an den Commit-Nachrichten vorzunehmen.
- UnterstĂŒtzung fĂŒr die Erstellung eines neuen Branches basierend auf dem Ergebnis der Festlegung der Merge-Base zweier anderer Branches (Merge Basis, Bindung an den gemeinsamen Vorfahren) mittels der Konstruktionen âgit branch new AâŠBâ und âgit checkout -b new AâŠBâ hinzugefĂŒgt, wobei âAâŠBâ die Festlegung der Merge-Base zwischen zwei angegebenen Commits impliziert, Ă€hnlich wie âgit checkout AâŠBâ den HEAD auf den Basis-Commit verschiebt und âdiff AâŠBâ die Ănderungen zwischen dem Commit âBâ und dem gemeinsamen Vorfahren von Commit âAâ anzeigt.
Zum Beispiel kann beim Arbeiten an einem separaten Branch my-feature die vorgeschlagene Funktion verwendet werden, wenn man von einem anderen Branch aus beginnen möchte, beispielsweise von dem Punkt im Master-Branch, an dem der Branch my-feature erstellt wurde. Zuvor war es erforderlich, das Ănderungsprotokoll manuell zu durchsuchen, was bei umfangreichen ĂnderungsverlĂ€ufen umstĂ€ndlich war. Man musste dann âgit merge-base master my-featureâ ausfĂŒhren, um den Hash des Mergebasis zwischen den Branches master und my-feature zu berechnen, und einen neuen Branch relativ zum gemeinsamen Vorfahren erstellen: âgit branch my-other-feature hashâ. In Git 2.22 kann zum Erstellen eines Branches relativ zur Merge-Base zweier anderer Branches die Syntax âgit branch my-other-feature AâŠBâ verwendet werden;
- Die Option âgit branch âshow-currentâ wurde hinzugefĂŒgt, um den Namen des Branches anzuzeigen, der nach der AusfĂŒhrung der Checkout-Operation erhalten wurde;
- Die Option âgit checkout âno-overlay â dirâ wurde hinzugefĂŒgt, um beim AusfĂŒhren der Checkout-Operation den Inhalt des Verzeichnisses dir in einen Zustand zu versetzen, der dem Zustand des Master-Branches vollstĂ€ndig entspricht. Wenn im lokalen Kopie des Verzeichnisses dir eine Datei vorhanden ist, die im Master-Branch fehlt, wird sie standardmĂ€Ăig bei âgit checkout master â dirâ belassen, wĂ€hrend sie bei Angabe der Option ââno-overlayâ gelöscht wird;
- In der âgit diffâ-Befehlszeile wurde eine universelle API zur Analyse von Optionen implementiert, was eine einheitliche Verarbeitung der Optionen mit anderen Git-Tools ermöglicht hat. Beispielsweise sind in âgit diffâ jetzt fĂŒr alle Optionen deren Antagonisten verfĂŒgbar (ââfunction-contextâ und ââno-function-contextâ);
- Die Möglichkeit zur Filterung beim Ausgeben von âgit logâ von an die Commits angehĂ€ngten erweiterten Labels (âtrailerâ â zusĂ€tzliche Informationsflags wie Signiert-von und Co-Author-von) wurde hinzugefĂŒgt. Eine Filterung der Labels ist sowohl nach SchlĂŒssel als auch nach Wert möglich, zum Beispiel:
âgit log âpretty=â%(trailers:key=Reviewed-by,valueonly)â; - Ein neuer Trace2-Tracking-Mechanismus wurde hinzugefĂŒgt, der ein flexibleres und strukturiertes Ausgabeformat bietet. Trace2 ermöglicht das Sammeln von Telemetriedaten ĂŒber ausgefĂŒhrte Operationen und Leistungsdaten fĂŒr eine detailliertere Analyse und Fehlersuche (der Handler wird vom Benutzer zugewiesen, keine Daten werden nach auĂen gesendet);
- Der Bericht âgit bisectâ wurde lesbarer gestaltet, wobei problematische Commits nun deutlicher hervorgehoben werden und eine zusammenfassende Statistik zu den Ănderungen fĂŒr jede Datei (auf der Ebene der Anzahl der geĂ€nderten Zeilen) ausgegeben wird;
- Die Heuristik zur Erkennung von Umbenennungen von Verzeichnissen wurde ĂŒberarbeitet, um falsche Umbenennungsmarkierungen zu vermeiden. Bei Zweifeln werden solche Verzeichnisse nun als konfliktierend gekennzeichnet;
- Es wird eine Warnung ausgegeben, wenn versucht wird, ein Tag auf ein anderes Tag zu setzen, was in der Regel ein Fehler ist und dazu fĂŒhren kann, dass das Tag nicht auf den richtigen Commit gesetzt wird (zum Beispiel fĂŒhrt eine Konstruktion wie âgit tag -f -m âupdated messageâ my-tag1 my-tag2â dazu, dass ein Tag auf ein altes Tag gesetzt wird, wĂ€hrend der Entwickler erwartet, dass das neue Tag auf den Commit gesetzt wird, auf den das alte Tag verweist);
- Die Generierung von Reachability-Bitmaps fĂŒr Repositories wurde aktiviert, die Daten ĂŒber Objektmengen speichern, die fĂŒr jeden Commit verfĂŒgbar sind, und es ermöglichen, schnell das Vorhandensein eines Basisobjekts zu bestimmen. Die angegebene Struktur verkĂŒrzt die Dauer der DatenausfĂŒhrungen (git fetch) erheblich.
Quelle: opennet.ru
