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 544 Änderungen integriert, die von 78 Entwicklern vorgenommen wurden, von denen 21 zum ersten Mal an der Entwicklung teilnahmen. :
- Die Unterstützung von Konfigurationsmakros wurde hinzugefügt, mit denen man schnell zwischen verschiedenen Einstellungen wechseln kann, ohne sich mit den spezifischen Optionen, die damit verbunden sind, auseinandersetzen zu müssen. Mit Hilfe von Makros ist es nicht nötig, sich die genauen Einstellungen zu merken, die geändert werden müssen, um eine bestimmte Funktionalität zu aktivieren. Beispielsweise könnte bei einer Verlangsamung der Arbeit mit einem großen Repository auf ein neues Indizierungsverfahren umgeschaltet, die Kompression von Pfadpräfixen aktiviert und der Cache nicht verfolgter Dateien verwendet werden, indem der Parameter index.version auf 4 und core.untrackedCache aktiviert wird. Makros ermöglichen es, keine Zeit mit der Suche nach der richtigen Lösung in der Dokumentation zu verschwenden, sondern sofort die Einstellungen mit Optimierungen für Repositories mit einer großen Anzahl von Dateien zu aktivieren:
git config feature.manyFiles true
- Die Speicherung von Objekten in Form eines Commit-Diagramms (commit-graph) ist standardmäßig aktiviert, bei der eine graphbasierte Struktur anstelle einer linearen Liste von Hashes mit Verweisen auf andere Objekte für die Indizierung verwendet wird. Während zuvor zum Ermitteln von Releases, die einen bestimmten Fix enthalten, jedes Objekt von der Festplatte geladen werden musste, um nach Verweisen zu suchen, kann man bei einer graphbasierten Speicherung sofort alle notwendigen Verbindungen erkennen. Der Wechsel zur graphbasierten Speicherung in den Linux-Kernel- und Git-Repositories hat eine nahezu doppelte Leistungssteigerung bei Operationen mit Branches ermöglicht. Um die neue Speicherungsmethode nach dem Update auf Git 2.24 zu aktivieren, sollte der Befehl „git gc“ ausgeführt werden.
Bei Änderungen im Zusammenhang mit commit-graph wird auch darauf hingewiesen, dass der Fortschrittsindikator für die Ausführung von Operationen in den mit commit-graph verbundenen Befehlen („git commit-graph write“, „git commit-graph verify“ usw.) nun einheitlich mit anderen Befehlen dargestellt wird. Der Fortschrittsindikator wird standardmäßig nur für das Terminal ausgegeben (um das Verhalten zu ändern, sollte die Option „-[no-]progress“ verwendet werden). Außerdem wurde eine neue Konfigurationsoption fetch.writeCommitGraph hinzugefügt, die die automatische Aktualisierung der Commit-Graph-Datei bei „git fetch“-Operationen ermöglicht (alle von externen Repositories abgerufenen Commits werden sofort in den commit-graph aufgenommen, ohne dass ein separater auto-gc-Befehl ausgeführt werden muss);
- Ein neuer Befehl zum Neu-Schreiben der Änderungsverlaufsgeschichte wurde hinzugefügt — „„, der eine einfachere Alternative zum Befehl „“ für Operationen mit der Änderungsverlaufsgeschichte im Repository darstellt (z. B. das Entfernen einer Datei aus dem Repository oder das Extrahieren der Änderungsverlaufsgeschichte eines bestimmten Verzeichnisses). Um die Effizienz zu steigern, werden bei „git filter-repo“ die Operationen an einer Darstellung der Geschichte in Form eines kontinuierlichen Flusses durchgeführt, anstatt sie nach Commits geordnet zu analysieren.
Die Filterung der Geschichte erfolgt durch die Option „-path-{glob,regex}“, die sowohl einfache Platzhalter als auch reguläre Ausdrücke ermöglicht. Außerdem gibt es Optionen zum Durchführen von „Suchen und Ersetzen“ oder zum Bereinigen von Binärobjekten, deren Größe ein bestimmtes Maß überschreitet. Jeder neu geschriebene Commit erhält eine neue SHA-1-HASH-ID, und alle Referenzen auf den ersetzten Commit werden entsprechend der neuen ID aktualisiert.
Für die Anzeige einer Zusammenfassung mit Statistiken über das Repository (Zahl der Objekte nach Typen, größte Dateien und Verzeichnisse, welche Erweiterungen am meisten Platz auf der Festplatte benötigen usw.) steht die Option „-analyze“ zur Verfügung. Zur Erweiterung der Funktionalität besteht die Möglichkeit, benutzerdefinierte Callback-Handler in Python hinzuzufügen, mit denen neue Unterbefehle erstellt und verschiedene Ereignisse verarbeitet werden können (z. B. neue Dateitypen);
- Die Option «—end-of-options» wurde hinzugefügt, um Optionen von Verlinkungsnamen zu trennen, die mit dem Symbol «-» beginnen und als Optionen wahrgenommen werden können («git log —end-of-options —super-dangerous-option»). Während solche Namen in der Praxis als «git log ‘refs/heads/—super-dangerous-option'» maskiert werden können, könnten in Skripten Probleme bei der Namensraumdefinition auftreten. Der allgemein verwendete Trenner » — » ist in diesem Fall nicht anwendbar, da er bereits zur Trennung von Verlinkungsnamen von Dateien verwendet wird (z. B. «git log —end-of-options —super-dangerous-option ^master — path/to/file»);
- Im «git rebase —rebase-merges» wurden die Optionen «—strategy» und «—strategy-option» zur Auswahl hinzugefügt. ;
- Ein neuer Handler «.git/hooks/pre-merge-commit» wurde hinzugefügt, der nach dem Merge, aber vor dem Schreiben des Ergebnis-Commits aufgerufen wird;
- Die Engine für die Befehlsvervollständigung unterstützt jetzt die Vervollständigung von Konfigurationsvariablen in Bezug auf die spezifischen Befehlsoptionen.
Wenn Sie beispielsweise «git -c core.autocrlf=false add path/to/my/file» eingeben müssen, sich aber nicht an den genauen Namen der Variablen «core.autocrlf» erinnern, können Sie die Tabulatortaste drücken und eine Vorschau erhalten.
Darüber hinaus haben die Git-Entwickler einen Verhaltenskodex für Projektteilnehmer eingeführt, der die grundlegenden Prinzipien zur Konfliktlösung definiert. Das Dokument basiert auf den Empfehlungen der «», die in vielen Open-Source-Projekten, einschließlich des Linux-Kernels, Eclipse, Freedesktop, GitLab, Ruby und Kubernetes, angewandt werden. Das Dokument definiert Chancengleichheit für alle Teilnehmer, unabhängig von ihrer Weltanschauung, ihrem Alter, Geschlecht, religiösen Überzeugungen, Bildungsgrad, sozialem Status und Nationalität. Freundliche Kommunikation, Verständnis und Empathie für die Probleme anderer Teilnehmer, die Akzeptanz konstruktiver Kritik sowie das Treffen der besten Entscheidungen für die gesamte Gemeinschaft werden in der Community begrüßt. Trolling, beleidigende Kommunikationsweise, Versuche der Herabwürdigung, Belästigung, Verletzungen der Privatsphäre, die Offenlegung persönlicher Informationen und andere Handlungen, die als unangemessen in einem professionellen Kommunikationskontext angesehen werden können, sind nicht erlaubt.
Quelle: opennet.ru
