Welcome! Please hold on...

0 %
Kashif Sohail
Sr. Frontend Developer
  • Residence:
    Pakistan
  • City:
    Karachi
  • Age:
    26
Magento 1x 2x
Wordpress
Laravel
Angular
React
English
Urdu
  • Bootstrap, Tailwind
  • Sass, Less, Css
  • Webpack
  • GIT knowledge
0

No products in the cart.

Highlights from Git 2.46 – The GitHub Blog

August 13, 2024

[ad_1]

Das Open-Source-Projekt Git hat gerade Git 2.46 veröffentlicht mit Features und Bugfixes von über 96 Mitwirkenden, 31 davon neu. Wir haben uns zuletzt mit Ihnen über die neuesten Entwicklungen bei Git informiert, als 2.45 wurde veröffentlicht.

Bevor wir auf die Details dieser neuesten Version eingehen, möchten wir Sie daran erinnern, dass Git-Zusammenführungdie Konferenz für Git-Anwender und -Entwickler findet dieses Jahr wieder am 19. und 20. September in Berlin statt. GitHub und GitButler sind Mitveranstalter der Veranstaltung, bei der es Vorträge von Entwicklern geben wird, die an Git arbeiten, sowie von Entwicklern, die Tools im Git-Ökosystem entwickeln. Die Einreichungsfrist endet am 8. August. Schauen Sie sich an die Website um mehr zu erfahren.

Nachdem das geklärt ist, hier nun GitHubs Blick auf einige der interessantesten Funktionen und Änderungen, die seit dem letzten Mal eingeführt wurden.

Schnellere Durchquerungen mit Pseudo-Merge-Bitmaps

Wiederkehrende Leser dieser Beiträge werden sich an unsere Berichterstattung über Erreichbarkeits-Bitmaps erinnern. Wenn Sie neu hier sind oder eine Auffrischung benötigen, finden Sie hier einen kurzen Überblick. Wenn Git eine Abrufanforderung erfüllen muss, beginnt es mit einem Satz von Commits, die der Client möchte, aber nicht hat, und einem anderen Satz, den der Client bereits hat und nicht möchte. Anhand dieser Informationen muss Git feststellen, welche Commits (und Bäume, Blobs usw.) zwischen den beiden Sätzen vorhanden sind, um die Abrufanforderung des Clients zu erfüllen. Sobald diese Informationen vorliegen, generiert es eine Packdatei um es an den Client zu senden, der die angeforderten Objekte enthält.

Wie also bestimmt Git die Menge der Objekte, die zwischen den „Haben“- und „Wünschen“-Objekten gesendet werden? Eine Möglichkeit hierzu besteht darin, rückwärts durch den Verlauf zu gehen, beginnend mit jedem Commit im „Wünschen“-Set, diese als interessant zu markieren, dann ihre Eltern zu untersuchen und so weiter, bis keine interessanten Commits mehr übrig sind. Wenn Git unterwegs auf ein Commit stößt, kann es den Weg entweder fortsetzen (wenn das Commit von keinem der „Haben“-Objekte aus erreichbar ist) oder nicht (andernfalls).

Dieser naive Objektdurchlauf bestimmt die Menge der zu sendenden Objekte, kann aber je nach Größe der „Haben“- oder „Wollen“-Menge, der Anzahl der Commits zwischen den beiden, der Tiefe der Zwischenbäume usw. langsam sein. Um diese Berechnung zu optimieren, verwendet Git Erreichbarkeits-Bitmaps um schneller die Menge der zu sendenden Objekte zu bestimmen. Bitmaps speichern die Menge der Objekte, die von einer Menge von Commits aus erreichbar sind, und kodieren diese Menge als Bitsatz wobei jedes Bit ein einzelnes Objekt eindeutig identifiziert. Hier ist ein Beispiel dafür in Aktion:

Im obigen Beispiel wird jedes Commit durch einen Kreis dargestellt, wobei Kästchen eine Handvoll Referenzen anzeigen (wie refs/heads/main, refs/heads/foousw.). Unten links gibt es drei Bitmaps für Commits C(0,1), C(0,3)Und C(0,5). Um die Menge der zu sendenden Objekte zu bestimmen, beginnt Git damit, von jeder der angegebenen Referenzen rückwärts entlang der Eltern jedes Commits zu gehen und erreichbare Commits mit der Farbe Grün zu markieren. Wenn ein Commit während der Durchquerung bereits grün gefärbt ist, können wir früher aufhören. Wenn Git auf ein Commit stößt C(0,5)sieht es, dass dieses Commit eine Bitmap hat, die die Menge der von ihm aus erreichbaren Objekte angibt. Wenn dies geschieht, kann Git schnell alle diese Objekte als erreichbar markieren, ohne diesen Teil der Historie tatsächlich durchgehen zu müssen.

Bitmaps können also viele Objektdurchläufe wie die oben beschriebenen beschleunigen. Beachten Sie jedoch, dass immer noch viele manuelle Objektdurchläufe aus den anderen Zweigen erfolgen, wie foo, barund so weiter. Git könnte mehr Bitmaps schreiben, aber das kann teuer werden.

In Git 2.46 führte Git experimentelle Unterstützung für eine neue Art von Bitmap ein, genannt Pseudozusammenführung Erreichbarkeits-Bitmap. Anstatt Bitmaps für einzelne Commits zu speichern, speichern Pseudo-Merge-Bitmaps die Menge der Objekte, die von mehreren Commits aus erreichbar sind, und nicht von einem einzelnen. Wenn der Client Commits erreichen möchte, beispielsweise von foo, barUnd bazgenügt es, eine einzige Pseudo-Merge-Bitmap zu haben, die diesen Commits entspricht. Hier ist ein Beispiel für dieselbe Traversierung wie zuvor, diesmal jedoch mit Pseudo-Merge-Bitmaps:

Erreichbarkeitsdurchquerung mithilfe von Pack-Bitmaps mit aktivierten Pseudo-Merge-Bitmaps.

Beachten Sie, dass sich in der unteren linken Ecke eine neue Bitmap befindet, die der Pseudozusammenführung zwischen Commits entspricht. C(1,1), C(2,2), C(0,7)Und C(3,4)Die ersten drei sind alle Teil des expliziten „Wunsch“-Sets, und C(3,4) ist implizit erwünscht, da es erreichbar ist von der baz Und quux ist implizit erwünscht, da es erreichbar ist von der baz Und quux Filialen.

Git beginnt seine Durchquerung auf die gleiche Weise, indem es von jedem der Start-Commits rückwärts geht. An jedem Punkt prüft es, ob Pseudo-Merges verwendbar sind oder nicht: das heißt, ob die Commits, die sie beschreiben, alle entweder explizit oder implizit vom Client gewünscht werden. Wenn Git beginnt, rückwärts von refs/heads/bazes markiert C(3,4)und stellt fest, dass der Pseudo-Merge verwendbar ist. Sobald dies geschieht, werden alle Commits, die den Bits im Pseudo-Merge entsprechen, markiert. Schließlich führt Git einige verbleibende manuelle Durchlaufschritte rückwärts aus von refs/heads/quux bis die gesamte Wanderung abgeschlossen ist.

Dieser Beitrag deckt nur die Spitze des Eisbergs mit Pseudo-Merge-Bitmaps ab, die eine Menge neuer Konfigurationsoptionen bieten, um zu bestimmen, wie Pseudo-Merges in großen Repositories ausgewählt und organisiert werden. Die neue Konfiguration (sowie die Funktion selbst) gilt noch als experimentell, aber Sie können loslegen, indem Sie Pseudo-Merges in Ihrem Repository wie folgt aktivieren:

# configure pseduo-merge bitmaps
$ git config bitmapPseudoMerge.all.pattern 'refs/(heads|tags)/'
$ git config bitmapPseudoMerge.all.threshold now
$ git config bitmapPseudoMerge.all.stableThreshold never

# then generate a new *.bitmap file
$ git repack -adb

GitHub wird in Kürze Pseudo-Merge-Bitmaps einführen, also können Sie zu diesem Zeitpunkt mit einem Folgebeitrag von uns rechnen, in dem wir noch tiefer auf die Funktionsweise von Pseudo-Merge-Bitmaps eingehen.

[source, source]


  • Am Ende unserer obigen Beschreibung von Pseudo-Merge-Bitmaps verwendeten wir die git config Befehl, um zu zeigen, wie Sie Ihr Repository optimieren können .gitconfig Datei, um Bitmaps zu aktivieren. Erfahrene Git-Benutzer werden wissen, dass dieser Befehl viel mehr kann, als nur Konfigurationsoptionen festzulegen. Er kann alle Konfigurationseinstellungen auflisten, eine einzelne (oder mehrere, die einer regulärer Ausdruck), Einstellungen rückgängig machen, Abschnitte umbenennen oder entfernen und sogar eine .gitconfig in Ihrem $EDITOR der Wahl.

    In der Vergangenheit waren diese Optionen alle hinter verschiedenen Befehlszeilenoptionen versteckt, wie --get, --get-all, --unsetUnd --remove-sectionum nur einige zu nennen.

    Git 2.46 hat eine neue Benutzeroberfläche für diesen Befehl bereitgestellt, die die vielen Funktionen in einigen Unterbefehlen der obersten Ebene gruppiert, was die Verwendung wesentlich vereinfacht. Wenn Sie beispielsweise alle Konfigurationseinstellungen in Ihrem Repository auflisten möchten, können Sie einfach Folgendes ausführen: git config listWenn Sie eine einzelne Einstellung erhalten möchten, können Sie Folgendes ausführen: git config get Wenn Sie Ihre Ergebnisse weiter einschränken möchten, um nur diejenigen anzuzeigen, die einem regulären Ausdruck entsprechen, können Sie die --regexp Option zusammen mit der get Unterbefehl.

    Diese neuen Befehlszeilenoptionen und Unterbefehlsmodi organisieren git configDie verschiedenen Funktionen von sind viel übersichtlicher und der Befehl ist viel einfacher zu verwenden, während die Abwärtskompatibilität mit allen vorhandenen Aufrufen erhalten bleibt. Weitere Informationen zu den neuen Modi finden Sie unter die Dokumentation für git-config(1).

    [source]

  • Wir haben über Git’s geschrieben Anmeldeinformationshilfe Mechanismus in vorherige Beiträge aus dieser Serie. Falls Sie nicht vertraut sind, wird dieser Mechanismus verwendet, um Anmeldeinformationen bereitzustellen, wenn auf Repositories zugegriffen wird, die diese erfordern. Anmeldeinformationshelfer übersetzen zwischen Gits Anmeldeinformations-Hilfsprotokoll und andere Anwendungen wie Schlüsselbund.appoder libsecret.

    Allerdings ist die HTTP-Authentifizierung in Git praktisch auf Protokolle beschränkt, die einen Benutzernamen und ein Passwort erfordern. Für Dienste, die Inhaberauthentifizierungkönnen vertrauliche Anmeldeinformationen im http.extraHeader configuration Option, bei der vertrauliche Informationen im Klartext gespeichert werden müssen.

    Git 2.46 erweitert das Credential Helper-Protokoll um einige neue Tricks mit dem neuen authtype Und credential Felder. Das Protokoll wurde außerdem erweitert, um das Beibehalten beliebiger Zustände für jeden Credential Helper sowie die mehrstufige Authentifizierung für Protokolle wie NTLM und Kerberos zu unterstützen. Zusammen ermöglichen die neuen Credential Helper-Funktionen das Entfernen vertraulicher Daten aus dem http.extraHeader Konfiguration und ebnen den Weg für die Implementierung von Protokollen wie NTLM und Digest.

    Wenn Sie neugierig sind und mehr erfahren möchten, können Sie sich einige der neuen Protokolländerungen ansehen Hier.

    [source]

  • In unser letzter Beitragsprachen wir über Gits vorläufige Unterstützung für eine neue Art von Referenzspeicher-Backend, reftisch. Leser, die neugierig sind und mehr über die Details dieses neuen Speicher-Backends erfahren möchten, sollten sich diesen Beitrag ansehen. Eine allgemeine Beschreibung lautet jedoch, dass reftable ein neues binäres Format für die Referenzspeicherung ist. Es ist für eine nahezu zeitkonstante Suche nach einzelnen Referenzen, eine effiziente Suche im gesamten Referenz-Namespace durch Präfixkomprimierung und atomare Updates konzipiert, die mit der Größe des Updates skaliert werden, nicht mit der Gesamtzahl der bereits vorhandenen Referenzen.

    Die Reftable-Unterstützung wird innerhalb von Git noch weiterentwickelt. In unserem letzten Update haben wir gesagt, dass Sie ein neues Repository mit dem Reftable-Backend initialisieren können, indem Sie Folgendes ausführen: git init --ref-format=reftable /path/to/repo.git. In Git 2.46 können Sie nun vorhandene Repositories konvertieren, um das reftable-Backend zu verwenden, indem Sie das neue git refs migrate --ref-format=reftable Befehl.

    Beachten Sie, dass die Unterstützung von reftable immer noch als experimentell gilt und die git refs migrate Befehl hat einige bekannte Einschränkungen beim Konvertieren von Repositories zur Verwendung des neuen reftable-Backends. Wenn Sie jedoch immer auf dem neuesten Stand bleiben möchten oder ein Repository haben, von dem Sie eine nicht reftable-Kopie haben, können Sie noch heute mit reftable experimentieren.

    [source]

  • Wenn Sie Git lange genug verwendet haben, sind Ihnen beim Ausführen subtiler oder unsicherer Vorgänge, wie z. B. dem Auschecken eines getrennten HEAD-Zustands, möglicherweise einige seiner „Ratschlag“-Meldungen begegnet:

    $ git checkout HEAD^
    Note: switching to 'HEAD^'.
    
    You are in 'detached HEAD' state. You can look around, make experimental
    changes and commit them, and you can discard any commits you make in this
    state without impacting any branches by switching back to a branch.
    
    [...] 
    

    Diese Hinweismeldungen sollen hilfreiche Tipps für die Durchführung von Vorgängen geben, die unbeabsichtigte Folgen haben können (wie z. B. das Committing in einem abgetrennten Header-Zustand, bei dem Ihre Commits leichter verloren gehen, wenn Sie nicht vorsichtig sind). Sie können auch verschiedene Arten von Hinweismeldungen deaktivieren, wenn Sie mit den möglichen Folgen einverstanden sind. Im obigen Beispiel können Sie Folgendes ausführen: git config set advice.detachedHead false um Git anzuweisen, die oben genannte Hinweismeldung zu unterdrücken.

    Allerdings muss jede Hinweismeldung einzeln aktiviert oder deaktiviert werden. Daher kann es beispielsweise beim Skripting mühsam sein, die Liste der verschiedenen Arten von Hinweismeldungen ständig zu pflegen und zu aktualisieren.

    In Git 2.46 hat Git eine neue Top-Level-Option, --no-advicewodurch alle Hinweismeldungen deaktiviert werden. Sie können diese neue Option beim Skripting verwenden, um eine Überlastung Ihres stderr Ausgabe mit Hinweismeldungen wie den oben genannten.

    [source]

  • Git verfügt über eine umfassende Testsuite, die hauptsächlich in Shell-Skripten geschrieben ist und Zehntausende von Integrationstests enthält. Obwohl diese Shell-Skripte eine effektive Methode zum Testen vieler Komponenten von Git sind, haben sie auch ihre Nachteile. Auf Plattformen wie Windows, auf denen der Aufwand zum Erzeugen neuer Prozesse höher ist, können sie langsamer sein.

    Sie können sich auch manchmal als umständlich erweisen, wenn es darum geht, Komponenten auf niedrigerer Ebene von Git zu testen, wie etwa die Implementierung des FortschrittsanzeigeFür Komponenten wie den Fortschrittsmesser implementiert Git oft eine Low-Level Testhelfer die die zu testende Komponente über ein zeilenorientiertes Protokoll manipulieren kann, das dann gesteuert durch Shell-Skripte.

    Git hat begonnen, einige seiner Integrationstests in Unit-Tests umzuwandeln, wodurch es einfacher wird, einige der Komponenten auf niedrigerer Ebene von Git direkt zu testen. Weitere Einzelheiten dazu, wie diese Umwandlungen bisher verlaufen sind, finden Sie in den folgenden Quelllinks.

    [source, source, source, source, source, source, source, source, source]

Der Rest des Eisbergs

Dies ist nur ein Beispiel für die Änderungen der letzten Version. Weitere Informationen finden Sie in den Versionshinweisen für 2,46oder jede frühere Version In das Git-Repository.

Hinweise

Geschrieben von

Taylor Blau

Leitender Softwareentwickler bei GitHub, der an Git arbeitet.

[ad_2]

Source link

Posted in TechnologyTags:
Write a comment