Veröffentlichung des verteilten versionierten Systems . Git ist eines der beliebtesten, zuverlĂ€ssigsten und leistungsstĂ€rksten Versionskontrollsysteme, das flexible Mittel fĂŒr die nichtlineare Entwicklung bereitstellt, die auf Branching und Merging basieren. Zur GewĂ€hrleistung der IntegritĂ€t der Historie und der WiderstandsfĂ€higkeit gegenĂŒber nachtrĂ€glichen Ănderungen wird die gesamte vorherige Historie in jedem Commit implizit gehasht. Zudem ist es möglich, digitale Signaturen fĂŒr bestimmte Tags und Commits durch die Entwickler zu verifizieren.
Im Vergleich zur vorherigen Version wurden in die neue Version 745 Ănderungen aufgenommen, die von 74 Entwicklern vorbereitet wurden, von denen 18 erstmals an der Entwicklung beteiligt waren. :
- Der seit der Version 1.18 verfĂŒgbare neue Modus zur Ăbertragung von Commit-Sets âgit rebase ârebase-mergesâ ersetzt die alte Option ââpreserve-mergesâ, die jetzt als veraltet markiert ist. Der Befehl âgit rebaseâ wird verwendet, um eine Reihe von Commits durch einen neuen Basis-Commit zu ersetzen, beispielsweise um einen bestimmten Branch, in dem ein neues Feature entwickelt wird, an den aktuellen Stand des Master-Branches zu verschieben, der nach dem Abzweigen hinzugefĂŒgte Korrekturen umfasst:
o â o â o (my-feature)
/
o â o â o â o â o (master)
o â o â o (my-feature)
/
o â o â o â o â o (master)
Um die Verzweigungsstruktur in einem ĂŒbertragbaren Branch zu bewahren, konnte zuvor die Option ââpreserve-mergesâ verwendet werden. Diese erlaubte im interaktiven Modus (git rebase -i âpreserve-merges) das Bearbeiten der Commit-Geschichte, garantierte jedoch nicht die vollstĂ€ndige Erhaltung der Repository-Struktur. Der neue Modus âârebase-mergesâ ermöglicht es, die Struktur der Ănderungen im ĂŒbertragbaren Branch beizubehalten, wĂ€hrend er ein vollstĂ€ndiges Set an interaktiven Operationen bereitstellt, inklusive Löschen, Umgruppieren und Umbenennen von Commits.
Zum Beispiel âârebase-mergesâ Commits aus einem separaten Branch in einen neueren Master-Branch zu ĂŒbernehmen, dabei die Verzweigungsstruktur im ĂŒbertragbaren Branch zu bewahren und gleichzeitig einige Ănderungen in den Commit-Notizen vorzunehmen.
- UnterstĂŒtzung fĂŒr die Erstellung eines neuen Branches basierend auf dem Ergebnis der Merge-Base-Bestimmung zweier anderer Branches (Merge-Base, Anbindung an einen gemeinsamen Vorfahren) durch die Befehle âgit branch new AâŠBâ und âgit checkout -b new AâŠBâ hinzugefĂŒgt, wobei âAâŠBâ die Bestimmung der Merge-Base zwischen den beiden angegebenen Commits impliziert, Ă€hnlich wie âgit checkout AâŠBâ HEAD auf den Basis-Commit verschiebt und âdiff AâŠBâ die Ănderungen zwischen dem Commit âBâ und dem gemeinsamen Vorfahren zu Commit âAâ anzeigt.
Zum Beispiel kann die vorgeschlagene Funktion beim Arbeiten an einem separaten Branch my-feature verwendet werden, wenn es erforderlich ist, von einem anderen Branch zu starten, beispielsweise von dem gleichen Punkt im Master-Branch, von dem der Branch my-feature abgezweigt wurde. Bisher war es notwendig, manuell das Ănderungsprotokoll zu ĂŒberprĂŒfen, was bei einer umfangreichen Ănderungshistorie unpraktisch war, und dann âgit merge-base master my-featureâ auszufĂŒhren, um den Hash der Merge-Base zwischen den Branches master und my-feature zu berechnen und einen neuen Branch relativ zum gemeinsamen Vorfahren mit âgit branch my-other-feature Hashâ zu erstellen. In Git 2.22 kann der Befehl âgit branch my-other-feature AâŠBâ verwendet werden, um einen Branch relativ zur Merge-Base zweier anderer Branches zu erstellen.
- Die Option âgit branch âshow-currentâ wurde hinzugefĂŒgt, um den Namen des Branches bei der AusfĂŒhrung der Checkout-Operation anzuzeigen;
- Die Option âgit checkout âno-overlay âdirâ wurde hinzugefĂŒgt, die es ermöglicht, den Inhalt des Verzeichnisses dir beim Checkout so zu gestalten, dass er vollstĂ€ndig dem Zustand des Master-Branches entspricht. Beispielsweise bleibt eine Datei in der lokalen Kopie des Verzeichnisses dir, die im Master-Branch fehlt, standardmĂ€Ăig bei âgit checkout master â dirâ, wĂ€hrend sie bei Angabe der Option ââno-overlayâ gelöscht wird;
- In dem Befehl âgit diffâ wurde eine universelle API zur Analyse der Optionen integriert, was eine einheitliche Verarbeitung der Optionen mit anderen Git-Dienstprogrammen ermöglichte. Beispielsweise sind fĂŒr alle Optionen jetzt auch ihre Antagonisten (ââfunction-contextâ und ââno-function-contextâ) verfĂŒgbar;
- Die Möglichkeit zur Filterung von erweiterten Labels (âtrailerâ â zusĂ€tzliche Informationsflags wie Signed-off-by und Co-authored-by), die an Commits angehĂ€ngt werden, wurde beim Ausgeben von âgit logâ hinzugefĂŒgt. Es kann nach SchlĂŒssel und Wert gefiltert werden, z. B.:
âgit log âpretty=â%(trailers:key=Reviewed-by,valueonly)â; - Ein neuer Trace2-Tracking-Mechanismus wurde hinzugefĂŒgt, der ein flexibleres und strukturierteres Ausgabenformat bietet. Trace2 ermöglicht die Erfassung von Telemetriedaten ĂŒber durchgefĂŒhrte Operationen und Leistungsdaten fĂŒr eine detailliertere Analyse und Fehlersuche (der Handler wird vom Benutzer zugewiesen, es werden keine Daten nach auĂen gesendet);
- Der Bericht âgit bisectâ wurde lesbarer gestaltet und hebt jetzt die problematischen Commits deutlicher hervor sowie erstellt eine Zusammenfassung der Ănderungen fĂŒr jede Datei (auf der Ebene der geĂ€nderten Zeilen);
- Die Heuristik zur Bestimmung von Umbenennungen von Verzeichnissen wurde ĂŒberarbeitet, um falsche Umbenennungsmarkierungen auszuschlieĂen. Bei Zweifeln werden solche Verzeichnisse nun als konfliktbehaftet markiert;
- Eine Warnung wird ausgegeben, wenn versucht wird, ein Tag auf ein anderes Tag zu setzen, was in der Regel versehentlich geschieht und dazu fĂŒhren kann, dass ein 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 erstellt wird, wĂ€hrend der Entwickler davon ausgeht, dass das neue Tag auf den Commit gesetzt wird, auf den das alte Tag zeigt);
- Die Generierung fĂŒr Bitmapp-Repositorys (die Datenstruktur âReachability Bitmapsâ), die Informationen ĂŒber verfĂŒgbare Objektsets fĂŒr jeden Commit speichert und es ermöglicht, das Vorhandensein des Basisobjekts schnell zu bestimmen, ist aktiviert. Diese Struktur verkĂŒrzt die AusfĂŒhrungszeit von Datenabrufoperationen (git fetch) erheblich.
Quelle: opennet.ru
