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 504 Ănderungen aufgenommen, die von 64 Entwicklern vorbereitet wurden, von denen 12 erstmals an der Entwicklung teilgenommen haben. :
- Der Standardwechsel zu des Git-Kommunikationsprotokolls wurde vollzogen, welches bei der Remote-Verbindung des Clients mit dem Git-Server verwendet wird. Die zweite Protokollversion ermöglicht es, Branches und Tags serverseitig zu filtern und dem Client lediglich eine verkĂŒrzte Liste von Referenzen zu ĂŒbermitteln. Zuvor wurde bei der AusfĂŒhrung eines beliebigen Fetch-Befehls dem Client immer die vollstĂ€ndige Liste der Referenzen im gesamten Repository gesendet, selbst wenn der Client nur einen Branch aktualisierte oder die AktualitĂ€t seiner Repository-Kopie prĂŒfte. Eine weitere bemerkenswerte Neuerung ist die Möglichkeit, neue Funktionen in das Protokoll einzufĂŒhren, sobald neue FunktionalitĂ€ten in den Werkzeugen verfĂŒgbar sind. Der Client-Code bleibt mit dem alten Protokoll kompatibel und kann weiterhin sowohl mit neuen als auch mit alten Servern arbeiten, indem er automatisch auf die erste Version zurĂŒckfĂ€llt, falls der Server die zweite nicht unterstĂŒtzt.
- Im Befehl âgit configâ wurde die Option ââshow-scopeâ hinzugefĂŒgt, die es erleichtert, den Ort zu ermitteln, an dem bestimmte Einstellungen definiert sind. Git erlaubt es, Einstellungen an verschiedenen Orten zu definieren: im Repository (.git/info/config), im Benutzerverzeichnis (~/ .gitconfig), in der globalen Konfigurationsdatei (/etc/gitconfig) sowie ĂŒber Befehlszeilenoptionen und Umgebungsvariablen. Es ist oft schwierig zu verstehen, wo genau eine gesuchte Einstellung definiert ist. Um dieses Problem zu lösen, war zuvor die Option ââshow-originâ verfĂŒgbar, die jedoch nur den Pfad zur Datei anzeigt, in der die Einstellung definiert ist, was nĂŒtzlich ist, wenn man die Datei bearbeiten möchte, jedoch nicht hilft, wenn der Wert ĂŒber âgit configâ mit den Optionen ââsystemâ, ââglobalâ oder ââlocalâ geĂ€ndert werden soll. Die neue Option ââshow-scopeâ zeigt den Kontext der Variablen an und kann in Kombination mit ââshow-originâ verwendet werden:
$ git âlist âshow-scope âshow-origin
global file:/home/user/.gitconfig diff.interhunkcontext=1
global file:/home/user/.gitconfig push.default=current
[âŠ]
local file:.git/config branch.master.remote=origin
local file:.git/config branch.master.merge=refs/heads/master$ git config âshow-scope âget-regexp 'diff.*'
global diff.statgraphwidth 35
local diff.colormoved plain$ git config âglobal âunset diff.statgraphwidth
- In den Bindingseinstellungen Die Verwendung von Platzhaltern in URLs ist erlaubt. Alle HTTP-Einstellungen und Git-Anmeldeinformationen können sowohl fĂŒr alle Verbindungen (http.extraHeader, credential.helper) als auch fĂŒr Verbindungen, die an die URL gebunden sind (credential.https://example.com.helper, credential.https://example.com.helper), festgelegt werden. Bisher war die Verwendung von Platzhaltern wie *.example.com nur fĂŒr HTTP-Einstellungen zulĂ€ssig, wurde jedoch nicht fĂŒr die Bindung von Anmeldeinformationen unterstĂŒtzt. In Git 2.26 wurden diese Unterschiede beseitigt, und beispielsweise kann zur Bindung eines Benutzernamens an alle Subdomains jetzt Folgendes angegeben werden:
[credential «https://*.example.com»]
username = ttaylorr
- Die experimentelle UnterstĂŒtzung fĂŒr partielle Klone (partial clones) wird weiterhin ausgebaut, wodurch es möglich ist, nur einen Teil der Daten zu ĂŒbertragen und mit einer unvollstĂ€ndigen Kopie des Repositories zu arbeiten. In der neuen Version wurde der neue Befehl âgit sparse-checkout addâ hinzugefĂŒgt, mit dem einzelne Verzeichnisse zur Anwendung der âCheckoutâ-Operation nur auf einen Teil des Arbeitsbaums hinzugefĂŒgt werden können, anstatt alle Ă€hnlichen Verzeichnisse auf einmal ĂŒber den Befehl âgit sparse-checkout setâ aufzulisten (Verzeichnisse können einzeln hinzugefĂŒgt werden, ohne die gesamte Liste jedes Mal erneut anzugeben).
Zum Beispiel, um das Repository git/git zu klonen, ohne Blobs zu ĂŒbertragen, die ĂberprĂŒfung nur auf das Wurzelverzeichnis der Arbeitskopie zu beschrĂ€nken und getrennte Markierungen fĂŒr die Verzeichnisse âtâ und âDocumentationâ zu ziehen, kann Folgendes angegeben werden:$ git clone âfilter=blob:none âsparse git@github.com:git/git.git
$ cd git
$ git sparse-checkout init âcone$ git sparse-checkout add t
âŠ.
$ git sparse-checkout add Documentation
âŠ.
$ git sparse-checkout list
Documentation
t - Die Leistung des Befehls âgit grepâ, der sowohl im aktuellen Inhalt des Repositories als auch in historischen Revisionen verwendet wird, wurde erheblich verbessert. Um die Suche zu beschleunigen, war das Scannen des Inhalts des Arbeitsbaums mit mehreren Threads (âgit grep âthreadsâ) zulĂ€ssig, aber die Suche in historischen Revisionen war einstufig. Dieses Limit wurde nun durch die Implementierung der Möglichkeit, Leseoperationen aus dem Objektspeicher zu parallelisieren, aufgehoben. StandardmĂ€Ăig wird die Anzahl der Threads auf die Anzahl der CPU-Kerne gesetzt, was in den meisten FĂ€llen jetzt keine explizite Festlegung der Option ââthreadsâ erfordert.
- Die UnterstĂŒtzung fĂŒr die automatische VervollstĂ€ndigung von Unterbefehlen, Pfaden, Links und anderen Argumenten des Befehls âgit worktreeâ, der das Arbeiten mit mehreren Arbeitskopien eines Repositories ermöglicht, wurde hinzugefĂŒgt.
- Die UnterstĂŒtzung fĂŒr helle Farben wurde hinzugefĂŒgt, fĂŒr die ANSI Escape-Sequenzen vorhanden sind. Zum Beispiel kann in den Farbeinstellungen der Hervorhebung âgit config âcolorâ oder âgit diff âcolor-movedâ ĂŒber die Option ââformatâ fĂŒr hellblau â%C(brightblue)â angegeben werden.
- Eine neue Version des Skripts wurde hinzugefĂŒgt. , das die Integration mit dem Mechanismus ermöglicht. zur Beschleunigung der Verfolgung von DateiĂ€nderungen und dem Erscheinen neuer Dateien. Nach der Aktualisierung von Git wird benötigt: ein Hook im Repository.
- Optimierungen zur Beschleunigung von TeilklonvorgĂ€ngen (partial clones) wurden hinzugefĂŒgt, die mit der Anwendung von Bitmaps zusammenhĂ€ngen,
(Bitmap-Maschine), um eine vollstĂ€ndige Durchsuchung aller Objekte wĂ€hrend der Antwortfilterung zu vermeiden. Die PrĂŒfung auf Blobs (âfilter=blob:none und âfilter=blob:limit=n) erfolgt beim Teilklonen jetzt
deutlich schneller. GitHub hat angekĂŒndigt, die Patches mit diesen Optimierungen und die experimentelle UnterstĂŒtzung fĂŒr TeilklonvorgĂ€nge anzuwenden. - Der Befehl âgit rebaseâ wurde auf einen anderen Backend umgestellt, der standardmĂ€Ăig den Mechanismus âmergeâ verwendet (frĂŒher fĂŒr ârebase -iâ benutzt) anstelle von âpatch+applyâ. In einigen Details unterscheiden sich die Backends, zum Beispiel schlĂ€gt das neue Backend nach der Fortsetzung des Vorgangs nach der Konfliktbehebung (git rebase âcontinue) vor, die Commit-Nachricht zu bearbeiten, wĂ€hrend das alte einfach die alte Nachricht verwendet hat. Um das alte Verhalten wiederherzustellen, kann die Option ââapplyâ verwendet oder die Konfigurationsvariable ârebase.backendâ auf den Wert âapplyâ gesetzt werden.
- Ein Beispiel fĂŒr einen Authentifizierungsparameter-Handler, der ĂŒber .netrc festgelegt wurde, wurde in eine fĂŒr den sofortigen Gebrauch geeignete Form gebracht.
- Die Einstellung gpg.minTrustLevel wurde hinzugefĂŒgt, um das minimale Vertrauensniveau fĂŒr verschiedene Elemente festzulegen, die die digitale Signatur ĂŒberprĂŒfen.
- In âgit rmâ und âgit stashâ wurde die Option ââpathspec-from-fileâ hinzugefĂŒgt.
- Die Verbesserung der Testsammlungen wird im Rahmen der Vorbereitung auf den Wechsel zu dem Hash-Algorithmus SHA-2 anstelle von SHA-1 fortgesetzt.
Quelle: opennet.ru
