Veröffentlichung des verteilten Systems zur Verwaltung von Quelltexten Git ist eines der beliebtesten, zuverlĂ€ssigsten und leistungsstĂ€rksten Versionskontrollsysteme, das flexible Mittel fĂŒr die nichtlineare Entwicklung bietet, die auf Verzweigung und ZusammenfĂŒhrung von Branches basieren. Um die IntegritĂ€t der Historie und die WiderstandsfĂ€higkeit gegen nachtrĂ€gliche Ănderungen zu gewĂ€hrleisten, wird das implizite Hashing der gesamten vorherigen Historie in jedem Commit verwendet; es ist auch möglich, einzelne Tags und Commits mit digitalen Signaturen der Entwickler zu authentifizieren.
Im Vergleich zur vorherigen Version wurden in die neue Version 583 Ănderungen aufgenommen, die mit UnterstĂŒtzung von 84 Entwicklern vorbereitet wurden, von denen 32 zum ersten Mal an der Entwicklung teilgenommen haben. :
- Die Möglichkeit des partiellen Klonens (partial clones), die es ermöglicht, nur einen Teil der Daten zu ĂŒbertragen und mit einer unvollstĂ€ndigen Kopie des Repositories zu arbeiten, rĂŒckt nĂ€her an die Stabilisierung und vollstĂ€ndige Bereitschaft. Beim normalen Klonen werden alle Daten aus dem Repository kopiert, einschlieĂlich jeder Version jeder Datei aus der Historie der Ănderungen. Bei sehr groĂen Repositories fĂŒhrt das Kopieren der Daten zu einem erheblichen Anstieg des Datenverkehrs und des Speicherplatzes, selbst wenn den Entwicklern nur eine Teilmenge von Dateien von Interesse ist. Um das Abrufen nur eines Teils des Arbeitsbaums von Quelltexten zu vereinfachen, wird in dieser neuen Version der experimentelle Befehl âsparse-checkoutâ und die neue Option ââsparseâ fĂŒr den Befehl âcloneâ angeboten.
Zuvor wurde der Prozess des selektiven Klonens durch die Festlegung von zum Herausfiltern ĂŒberflĂŒssiger Inhalte und die Option ââno-checkoutâ zum Deaktivieren des NachfĂŒllens fehlender Dateien durchgefĂŒhrt. Danach musste vor der AusfĂŒhrung der Checkout-Operation die Einstellung core.sparseCheckout aktiviert und in der Datei .git/info/sparse-checkout eine Liste von Vorlagen fĂŒr auszuschlieĂende Pfade definiert werden. Zum Beispiel konnte man, um ohne Blobs zu klonen und das Herausziehen von Dateien aus verschachtelten Verzeichnissen mit einer Tiefe von 2 oder mehr zu verbieten, 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 der Arbeit mit einem unvollstĂ€ndigen Repository auf die Befehle:
git clone âfilter=blob:none âsparse /your/repository/here repo
git sparse-checkout set /path/to/check/outDer Befehl sparse-checkout ermöglicht es, eine Liste von Pfaden fĂŒr den Checkout (set) festzulegen, ohne .git/info/sparse-checkout manuell anpassen zu mĂŒssen, sowie die aktuelle Liste von Pfaden (list) anzuzeigen und partielle Checkouts (enable/disable) ein- oder auszuschalten.
Zur Optimierung der Arbeit mit sehr groĂen Repositories und Vorlagenlisten wurde die Einstellung ââ eingefĂŒhrt, die die zulĂ€ssigen Muster einschrĂ€nkt (anstatt beliebiger Muster in .gitignore kann festgelegt werden, ob alle Pfade und Dateien in einem bestimmten Unterverzeichnis extrahiert werden sollen). Wenn in einem groĂen Repository beispielsweise ein Verzeichnis âA/B/Câ existiert und alle Arbeiten im Unterverzeichnis âCâ konzentriert sind, wird im sparsamen Modus âsparseCheckoutConeâ der Befehl âgit sparse-checkout set A/B/Câ den Inhalt von âCâ vollstĂ€ndig extrahieren, jedoch nur die Teile aus âAâ und âBâ, die zur Arbeit mit âCâ notwendig sind.
- Aus der Dokumentation (âgit rebase -hâ) wurden alle ErwĂ€hnungen der Option ââpreserve-mergesâ entfernt, die als veraltet gilt. Stattdessen sollte fĂŒr das Ăbertragen einer Gruppe von Commits â«.
- verwendet werden. Um die Lesbarkeit der in Mailinglisten gesendeten Patch-Nachrichten zu verbessern, wurde die Option âgit format-patch âcover-from-description subjectâ hinzugefĂŒgt, mit der der erste Absatz des Beschreibungstextes des Branches als Betreff fĂŒr das Begleitschreiben der Patch-Gruppe verwendet wird.
- Die UnterstĂŒtzung fĂŒr die gemeinsame Verwendung des Befehls âgit apply â3wayâ und der Einstellung âmerge.conflictStyleâ wurde implementiert (âgit applyâ berĂŒcksichtigt jetzt den Konfliktstil aus merge.conflictStyle bei Bedarf zur Konfliktlösung nach dem Versuch, eine Patch-Datei im Repository anzuwenden).
- Der Code zur Funktionsbestimmung, 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 erweitert. .
- In âgit addâ, âgit commitâ, âgit resetâ und anderen Befehlen 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.
- Es wurde ein Problem mit der Bestimmung von Umbenennungen auf Verzeichnisebene bei der Aufzeichnung von Commits behoben. Die Bestimmung funktionierte nicht, wenn der Inhalt eines Unterverzeichnisses in das Root-Verzeichnis des Repositories verschoben wurde.
- Eine erste Implementierung des ĂŒberarbeiteten Befehls âgit add -iâ wurde vorgeschlagen, der es ermöglicht, geĂ€nderte Inhalte interaktiv hinzuzufĂŒgen und von Perl auf C umgeschrieben wurde. Ein Ă€hnlicher Umbau des Befehls âgit add -pâ erfolgt ebenfalls.
- Das Team âgit log âgraphâ wurde neu strukturiert, um eine ASCII-Darstellung des Commit-Histogramms im Repository zu erstellen. Die Ăberarbeitung hat es ermöglicht, die Ausgabe erheblich zu verbessern und zu vereinfachen, ohne die Struktur der Historie zu verzerren, was beispielsweise das Problem mit dem Ăberlaufen der Darstellung ĂŒber die Breite der Terminalzeile gelöst hat.
- Die Option âgit log âformat=..â, die es ermöglicht, das Ausgabeformat zu Ă€ndern,
wurde um die UnterstĂŒtzung der Flags âl/Lâ erweitert, um nur den Teil der E-Mail-Adresse vor dem Symbol â@â auszugeben (z. B. nĂŒtzlich, wenn alle Entwickler E-Mails in derselben Domain haben). - Der Befehl âgit submoduleâ hat einen neuen Unterbefehl âset-urlâ erhalten.
- Die TestfÀlle wurden im Rahmen der Vorbereitung auf die Umstellung auf
den Hash-Algorithmus SHA-2 anstelle von SHA-1 aktualisiert.
Quelle: opennet.ru
