Veröffentlichung des Quellcode-Management-Systems Git 2.36.

Nach drei Monaten Entwicklung wurde die Version 2.36 des verteilten Systems zur Verwaltung von Quelltexten Git veröffentlicht. Git ist eines der beliebtesten, zuverlĂ€ssigsten und leistungsstĂ€rksten Versionsverwaltungssysteme, das flexible Mittel fĂŒr die nichtlineare Entwicklung bietet, die auf Branching und Merging basieren. Um die IntegritĂ€t der Geschichte und die WiderstandsfĂ€higkeit gegenĂŒber „nachtrĂ€glichen“ Änderungen zu gewĂ€hrleisten, wird eine implizite Hashierung der gesamten vorherigen Historie in jedem Commit verwendet; auch eine digitale Signierung durch die Entwickler einzelner Tags und Commits ist möglich.

Im Vergleich zur vorherigen Version wurden in die neue Version 717 Änderungen aufgenommen, die mit Beteiligung von 96 Entwicklern erstellt wurden, von denen 26 zum ersten Mal an der Entwicklung teilnahmen. Die wichtigsten Neuerungen sind:

  • Den Befehlen „git log“ und „git show“ wurde die Option „—remerge-diff“ hinzugefĂŒgt, die es ermöglicht, die Unterschiede zwischen dem gemeinsamen Ergebnis des Mergings und den tatsĂ€chlichen Daten, die im Commit nach der AusfĂŒhrung des Befehls „merge“ angezeigt werden, darzustellen. Dies ermöglicht eine anschauliche Bewertung der Änderungen, die aufgrund der Konfliktlösungen beim Mergen vorgenommen wurden. Der gewöhnliche Befehl „git show“ trennt verschiedene Konfliktlösungen mit EinrĂŒckungen, was das VerstĂ€ndnis der Änderungen erschwert. Zum Beispiel zeigt die folgende Abbildung die Zeilen „+/-“ ohne EinrĂŒckung die letzte Konfliktlösung, die mit der Umbenennung in der ersten Branch sha1 auf oid im Kommentar verbunden ist, wĂ€hrend „+/-“ mit EinrĂŒckung die ursprĂŒngliche Konfliktlösung darstellt, die durch das Erscheinen eines zusĂ€tzlichen Arguments in der Funktion dwim_ref() in der zweiten Branch verursacht wurde.
    Veröffentlichung des Quellcode-Management-Systems Git 2.36.

    Bei Verwendung der Option „—remerge-diff“ werden die Unterschiede zwischen den Konfliktlösungen nicht fĂŒr jede Eltern-Branch getrennt angezeigt, sondern die allgemeinen Unterschiede zwischen der Datei mit Merge-Konflikten und der Datei, in der die Konflikte gelöst sind.

    Veröffentlichung des Quellcode-Management-Systems Git 2.36.
  • Die FlexibilitĂ€t zur Anpassung des Verhaltens beim ZurĂŒcksetzen von Disk-Caches ĂŒber den Aufruf der Funktion fsync() wurde erhöht. Der zuvor verfĂŒgbare Parameter core.fsyncObjectFiles wurde in zwei Konfigurationsvariablen core.fsync und core.fsyncMethod aufgeteilt, die es ermöglichen, fsync nicht nur auf Objektdaten (.git/objects) anzuwenden, sondern auch auf andere Git-Strukturen wie Referenzen (.git/refs), Reflog und Pack-Dateien.

    Über die Variable core.fsync kann eine Liste interner Git-Strukturen angegeben werden, fĂŒr die nach einem Schreibvorgang zusĂ€tzlich fsync aufgerufen wird. Die Variable core.fsyncMethod ermöglicht die Auswahl der Methode zum Leeren des Caches; zum Beispiel kann fsync gewĂ€hlt werden, um den gleichnamigen Systemaufruf anzuwenden, oder writeout-only, um die verzögerte Schreibweise (pagecache writeback) anzuwenden.

  • Zum Schutz vor Schwachstellen, die das Manipulieren von Platzhaltern durch andere Benutzer in gemeinsamen Verzeichnissen .git angehen, wurde die ÜberprĂŒfung des Repository-EigentĂŒmers verstĂ€rkt. Die AusfĂŒhrung von Git-Befehlen ist jetzt nur noch in den eigenen „.git“-Verzeichnissen zulĂ€ssig. Wenn das Verzeichnis mit dem Repository einem anderen Benutzer gehört, wird standardmĂ€ĂŸig ein Fehler ausgegeben. Dieses Verhalten kann ĂŒber die Einstellung safe.directory deaktiviert werden.
  • Der Befehl „git cat-file“, der zur Anzeige des Quelldateninhalts von Git-Objekten dient, wurde um die Option „—batch-command“ erweitert, die die zuvor verfĂŒgbaren Befehle „—batch“ und „—batch-check“ ergĂ€nzt und eine adaptive Auswahl des Ausgabeformats durch die Angabe von „contents “ fĂŒr den Inhalt oder „info “ fĂŒr Informationen ĂŒber das Objekt ermöglicht. Außerdem wird der Befehl „flush“ zur Leerung des Ausgabe-Puffers unterstĂŒtzt.
  • Der Befehl „git ls-tree“, der zur Erstellung einer Liste des Inhalts von ObjektbĂ€umen dient, erhielt die Option „—oid-only“ („—object-only“), die analog zu „—name-only“ nur die Objekt-IDs ausgibt, um den Aufruf aus Skripten zu vereinfachen. Zudem wurde die Option „—format“ implementiert, mit der ein eigenes Ausgabeformat definiert werden kann, indem Informationen ĂŒber Modus, Typ, Namen und GrĂ¶ĂŸe kombiniert werden.
  • Im Befehl „git bisect run“ wird nun das Nichteinstellen des Skript-Flags fĂŒr ausfĂŒhrbare Dateien erkannt, und in diesem Fall werden Fehler mit den Codes 126 oder 127 ausgegeben (frĂŒher wurden alle Revisionen als fehlerhaft markiert, wenn das Skript nicht ausgefĂŒhrt werden konnte).
  • Im Befehl „git fetch“ wurde die Option „—refetch“ hinzugefĂŒgt, um alle Objekte abzurufen, ohne die andere Seite ĂŒber bereits vorhandene Inhalte im lokalen System zu informieren. Ein solches Verhalten kann nĂŒtzlich sein, um den Zustand nach Fehlern wiederherzustellen, wenn man sich ĂŒber die IntegritĂ€t der lokalen Daten nicht sicher ist.
  • Die Befehle «git update-index», «git checkout-index», «git read-tree» und «git clean» unterstĂŒtzen jetzt partielle Indizes (sparse index), die die Leistung verbessern und Speicherplatz in Repositories sparen, in denen partielle Klonoperationen (sparse-checkout) durchgefĂŒhrt werden.
  • Das Verhalten des Befehls «git clone —filter=
 —recurse-submodules» wurde geĂ€ndert, sodass nun partielle Klonungen von Submodulen erfolgen (zuvor wurde der Filter nur auf den Hauptinhalt angewandt, wĂ€hrend Submodule vollstĂ€ndig ohne BerĂŒcksichtigung des Filters geklont wurden).
  • Im Befehl «git bundle» wurde die UnterstĂŒtzung fĂŒr das Angeben von Filtern zum selektiven Platzieren von Inhalten analog zu den Operationen des partiellen Klonens hinzugefĂŒgt.
  • Im Befehl «git branch» wurde die Option «—recurse-submodules» fĂŒr die rekursive Durchsuchung von Submodulen hinzugefĂŒgt.
  • FĂŒr die Sprache Kotlin wurde ein neuer Handler in userdiff vorgeschlagen.

Quelle: opennet.ru

60GB SSD 8Gb DDR4