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.

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.

- 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


