Veröffentlichung des verteilten versionierten Systems . Git gehört zu den beliebtesten, zuverlĂ€ssigen und leistungsstĂ€rksten Versionsverwaltungssystemen und bietet flexible Mittel fĂŒr nicht-lineare Entwicklungen, die auf dem Branching und Merging von Zweigen basieren. Um die IntegritĂ€t der Historie und die WiderstandsfĂ€higkeit gegenĂŒber nachtrĂ€glichen Ănderungen zu gewĂ€hrleisten, werden alle vorherigen Historien in jedem Commit implizit gehasht, und es ist auch möglich, digitale Signaturen fĂŒr bestimmte Tags und Commits der Entwickler zu verwenden.
Im Vergleich zur vorherigen Version wurden in die neue Version 583 Ănderungen integriert, an denen 84 Entwickler beteiligt waren, von denen 32 erstmals an der Entwicklung mitwirkten. :
- Die Möglichkeit des teilweisen Klonens nĂ€hert sich der StabilitĂ€t und vollstĂ€ndigen Bereitstellung. Diese Funktion ermöglicht es, nur einen Teil der Daten zu ĂŒbertragen und mit einer unvollstĂ€ndigen Kopie des Repositories zu arbeiten. Bei einem normalen Klonen werden alle Daten, einschlieĂlich jeder Version jeder Datei aus der Ănderungshistorie, kopiert. Bei sehr groĂen Repositories kann das Kopieren von Daten zu einem erheblichen Anstieg des Datenverkehrs und des Speicherplatzbedarfs fĂŒhren, selbst wenn der Entwickler nur an einer Teilmenge von Dateien interessiert ist. Um die Beschaffung eines Teils des Arbeitsverzeichnisses der Quelltexte zu erleichtern, wurde in dieser neuen Version der experimentelle Befehl âsparse-checkoutâ und eine neue Option ââsparseâ fĂŒr den Befehl âcloneâ eingefĂŒhrt.
Zuvor wurde der Vorgang des selektiven Klonens ĂŒber die Angabe um ĂŒberflĂŒssige Inhalte auszuschlieĂen und die Option «âno-checkout» zu nutzen, um das AuffĂŒllen fehlender Dateien zu deaktivieren. Danach musste vor der AusfĂŒhrung des Checkout-Vorgangs die Einstellung core.sparseCheckout aktiviert und in der Datei .git/info/sparse-checkout eine Liste der auszuschlieĂenden Pfadmuster definiert werden. Zum Beispiel konnte man fĂŒr ein Klonen ohne Blobs und das Verhindern des Auspackens von Dateien aus verschachtelten Verzeichnissen mit einer Tiefe von 2 oder mehr Folgendes ausfĂŒhren:
git clone âfilter=blob:none âno-checkout /your/repository/here repo
$ cd repo
$ cat >.git/info/sparse-checkout <EOF
/*
!/*
EOF
$ git config core.sparseCheckout 1
$ git checkout .Der neue Befehl «git sparse-checkout» vereinfacht die Arbeit erheblich und reduziert den Prozess der Organisation des Arbeitens mit unvollstÀndigen Repositories auf folgende Befehle:
git clone âfilter=blob:none âsparse /your/repository/here repo
git sparse-checkout set /path/to/check/outDer sparse-checkout-Befehl ermöglicht das Festlegen einer Liste von Pfaden fĂŒr den Checkout (set), ohne manuelle Anpassung der .git/info/sparse-checkout vorzunehmen, sowie das Anzeigen der aktuellen Pfadliste (list) und das Aktivieren oder Deaktivieren von partiellen Checkouts (enable/disable).
Um die Arbeit mit sehr groĂen Repositories und Listen von Mustern zu optimieren, wurde die Einstellung ««, die zulĂ€ssige Vorlagen einschrĂ€nkt (anstatt beliebiger .gitignore-Vorlagen können alle Pfade und alle Dateien in einem bestimmten Unterverzeichnis festgelegt werden, die extrahiert werden sollen). Wenn es in einem groĂen Repository beispielsweise ein Verzeichnis âA/B/Câ gibt und die gesamte Arbeit sich im Unterverzeichnis âCâ konzentriert, extrahiert der Befehl âgit sparse-checkout set A/B/Câ im Sparse-Checkout-Modus den Inhalt von âCâ vollstĂ€ndig, bei âAâ und âBâ jedoch nur die Teile, die fĂŒr die Arbeit mit âCâ erforderlich sind.
- Aus der Dokumentation (âgit rebase -hâ) wurden alle ErwĂ€hnungen der Option ââpreserve-mergesâ entfernt, die als veraltet gilt. Stattdessen sollte â«.
- Um die Lesbarkeit der Nachrichten mit Patches, die an Mailing-Listen gesendet werden, zu verbessern, wurde die Option âgit format-patch âcover-from-description subjectâ hinzugefĂŒgt. Bei Angabe dieser Option wird der erste Absatz des Beschreibungstextes der Branch als Betreff fĂŒr das Begleitschreiben der Patch-SĂ€tze verwendet.
- Die UnterstĂŒtzung fĂŒr den gemeinsamen Einsatz des Befehls âgit apply â3wayâ und der Einstellung âmerge.conflictStyleâ wurde implementiert. Nun berĂŒcksichtigt âgit applyâ den Konfliktbeschreibungstil aus merge.conflictStyle, wenn es notwendig ist, Konflikte nach dem Versuch, eine Patch-Datei auf das Repository anzuwenden, zu lösen.
- Der Code zur Bestimmung von Funktionen, der in Operationen wie âgit diff/grep âshow-function/âfunction-contextâ verwendet wird, wurde um die UnterstĂŒtzung zur Bestimmung der Funktionsgrenzen in Programmen in der Sprache .
- In âgit addâ, âgit commitâ, âgit resetâ und andere Befehle wurde eine neue Option ââpathspec-from-fileâ hinzugefĂŒgt, die es ermöglicht, eine Liste von Pfaden aus einer Datei oder einem Eingabestrom zu laden, anstatt sie in der Befehlszeile aufzulisten.
- Ein Problem bei der Erkennung von Umbenennungen auf Verzeichnisebene beim Aufzeichnen von Commits wurde behoben. Die Erkennung funktionierte nicht, wenn der Inhalt eines Unterverzeichnisses in das Wurzelverzeichnis des Repositories verschoben wurde.
- Es wurde eine erste Implementierung des ĂŒberarbeiteten Befehls âgit add -iâ vorgeschlagen, die es ermöglicht, geĂ€nderte Inhalte interaktiv hinzuzufĂŒgen und von Perl nach C umgeschrieben wurde. Eine Ă€hnliche Ăberarbeitung des Befehls âgit add -pâ ist im Gange.
- Das Kommando âgit log âgraphâ, das eine ASCII-Darstellung des Ănderungsverlaufs im Repository erstellt, wurde ĂŒberarbeitet. Die Neugestaltung ermöglicht eine erhebliche Verbesserung und Vereinfachung der Ausgabe, ohne die Struktur der Historie zu verzerren, was beispielsweise das Problem des Ăberlaufens der Grafik ĂŒber die Zeilenbreite des Terminals gelöst hat.
- Die Option âgit log âformat=..â, die das Ausgabeformat Ă€ndern kann,
wurde um die UnterstĂŒtzung der Flags âl/Lâ erweitert, um nur den Teil der E-Mail-Adresse auszugeben, der vor dem Zeichen â@â angegeben ist (z. B. nĂŒtzlich, wenn alle Entwickler ihre E-Mails in einer DomĂ€ne haben). - Der Befehl âgit submoduleâ hat den Unterbefehl âset-urlâ erhalten.
- Die Test-Suites wurden aktualisiert im Rahmen der Vorbereitung auf
den Wechsel zum Hash-Algorithmus SHA-2 anstelle von SHA-1.
Quelle: opennet.ru
