Die Veröffentlichung von Git 2.48, einem verteilten Versionskontrollsystem, ist erfolgt. Git zeichnet sich durch hohe Leistung aus und bietet Mittel fĂŒr nichtlineare Entwicklungen, die auf Verzweigungen und ZusammenfĂŒhrungen basieren. Um die IntegritĂ€t der Historie und die UnverĂ€nderlichkeit von Ănderungen "im Nachhinein" zu gewĂ€hrleisten, wird die gesamte vorherige Historie in jedem Commit implizit gehasht, sowie digitale Signaturen der Entwickler fĂŒr einzelne Tags und Commits verwendet. Der Git-Code wird unter der GPLv2+ Lizenz verteilt.
Im Vergleich zur vorherigen Version enthĂ€lt die neue Version 605 Ănderungen, die von 93 Entwicklern, von denen 35 erstmals an der Entwicklung beteiligt sind, vorbereitet wurden. Die wichtigsten Neuerungen sind:
- Die Möglichkeit, mit dem Build-System Meson zu kompilieren, wurde neben GNU Make und CMake implementiert. Um Git zu kompilieren, kann jetzt der Befehl âmeson setup build && ninja -C buildâ verwendet werden. Es wird angemerkt, dass die Makefile, die bei der Verwendung von GNU Make verwendet wird, auf 3887 Zeilen angewachsen ist und nicht so einfach ist, wie man es sich wĂŒnschen wĂŒrde. Das Meson-Toolset vereinfacht die Arbeit mit dem Build-System, ist komfortabel fĂŒr plattformĂŒbergreifende Kompilierungen und macht die Zusammenstellung zugĂ€nglicher fĂŒr AnfĂ€nger oder Entwickler, die keine Erfahrung mit der Make-Utility haben. Es sind keine PlĂ€ne in naher Zukunft in Sicht, die UnterstĂŒtzung fĂŒr Make und CMake einzustellen.
- Es wurden neue Build-Optionen hinzugefĂŒgt, die alternative Implementierungen des SHA-1-Hashes beim Berechnen von PrĂŒfziffern ermöglichen, die zur GewĂ€hrleistung der IntegritĂ€t von Datenblöcken in Pack-Dateien verwendet werden. Die Leistung der PrĂŒfziffernberechnungen ist von groĂer Bedeutung; beispielsweise entfallen beim Klonen eines Repositories mit dem Linux-Kernel etwa 78 % der Prozessorzeit auf deren Berechnung. Die standardmĂ€Ăig verwendete Implementierung umfasst zusĂ€tzliche KollisionsprĂŒfungen und SchutzmaĂnahmen gegen Angriffe auf SHA-1 wie SHAttered und Shambles. Ein solcher Schutz, der zusĂ€tzliche Ressourcen beansprucht, ist nur sinnvoll, wenn SHA-1 zu kryptografischen Zwecken verwendet wird, und nutzlos bei der ĂberprĂŒfung der IntegritĂ€t von Indexdaten.
FĂŒr den Bau von Git mit einer schnelleren, nicht fĂŒr kryptographische Systeme geeigneten SHA-1-Implementierung wurde eine Reihe von Optionen *_UNSAFE vorgeschlagen, z.B. âOPENSSL_SHA1_UNSAFEâ. Auf GitHub ermöglichte der Build mit vereinfachtem SHA-1 eine Leistungssteigerung der Extraktions- und Klonoperationen um 10-13 %.
- Die Möglichkeit zur Verwendung der Option "âremerge-diff" im Team "range-diff" wurde hinzugefĂŒgt, um die Unterschiede zwischen dem Gesamtergebnis eines Mergers und den tatsĂ€chlichen Daten anzuzeigen, die im Commit nach der AusfĂŒhrung des "merge"-Befehls reflektiert sind. Bei Verwendung der Option "âremerge-diff" werden die Unterschiede zwischen den Konfliktlösungen nicht fĂŒr jeden Elternzweig getrennt angezeigt, sondern die allgemeinen Unterschiede zwischen der Datei mit Merge-Konflikten und der Datei, in der die Konflikte gelöst sind. Im Kontext des "range-diff"-Befehls könnte die neue Option nĂŒtzlich sein, um Commit-Sets nach dem Verschieben der Commit-Sequenz mit dem "rebase"-Befehl unter Verwendung der Option "ârebase-merges" zu vergleichen.
- Die Möglichkeit, einen Git-Testbefehl im Modus zur Erkennung von Speicherlecks auszufĂŒhren, wurde hinzugefĂŒgt. Da Git Werkzeuge bereitstellt, die nach der AusfĂŒhrung der aufgerufenen Funktion beendet werden, wurden Speicherlecks frĂŒher nicht als groĂes Problem betrachtet. Die Notwendigkeit, Speicherlecks vollstĂ€ndig zu beseitigen, wurde relevant, nachdem mit der Auslagerung interner Funktionen in eine separate Bibliothek begonnen wurde, die in lang laufenden Prozessen eingesetzt werden kann.
- Es wurde mit der Erstellung einer Liste veralteter Modi und Funktionen begonnen, deren UnterstĂŒtzung kĂŒnftig eingestellt werden soll. Es wird angenommen, dass die Entfernung veralteter Funktionen in der Git-Version 3.0 erfolgen wird, die Ănderungen enthalten wird, die die AbwĂ€rtskompatibilitĂ€t beeintrĂ€chtigen.
- Die Optimierung des Befehls "git for-each-ref", der eine Liste von Links im Repository ausgibt, wurde fortgesetzt. Die Optimierung, die die Handler fĂŒr die Filterung von Links und die Formatierung der Ausgabe zusammenfĂŒhrt, wird nun nicht nur fĂŒr unsortierte Ausgaben, sondern auch bei Angabe der Option "âsort" angewendet.
- Die Implementierung von Reftable im Backend wurde mit Blockspeicher fĂŒr eine effiziente Speicherung von Referenzen auf Branches und Tags verbessert. Reftable ermöglicht eine signifikante Beschleunigung von Suche, LesevorgĂ€ngen und SchreibvorgĂ€ngen in Repositories mit einer sehr hohen Anzahl von Referenzen. In der neuen Version wird die Nutzung einiger Hilfs-APIs eingestellt, um die libgit-Bibliothek aus den Build-AbhĂ€ngigkeiten zu entfernen. Eine adaptive Fehlerbehandlung fĂŒr die von den Speicherzuweisungsfunktionen zurĂŒckgegebenen Fehler wurde implementiert (Speichermangel fĂŒhrt nun nicht mehr zu einem abrupten Programmabbruch). Die VorgĂ€nge zur Erstellung von Referenzen wurden beschleunigt und der Speicherverbrauch verringert.
- In der Implementierung des partiellen Klonens wurden Probleme gelöst, die zu Endlosschleifen und zur BeschĂ€digung des Repositories nach AusfĂŒhrung des Befehls âgit gcâ fĂŒhrten.
- Beim AusfĂŒhren des Befehls âgit fetch â wird nun ârefs/remotes//HEADâ auf den Branch umgeleitet, auf den sich HEAD bezieht, wenn ârefs/remotes//HEADâ auf dem lokalen System fehlt und der Branch auf der anderen Seite vorhanden ist. Um die Synchronisierung von ârefs/remotes//HEADâ mit dem HEAD-Wert auf der anderen Seite der Verbindung zu steuern, wurde die Einstellung remote..followRemoteHEAD hinzugefĂŒgt.
- Die Einstellung âremote..serverOptionâ wurde hinzugefĂŒgt, welche der Befehlszeilenoption ââserverOption=â Ă€hnlich ist.
- Im Befehl âgit rebase ârebase-mergesâ wird nach Möglichkeit sichergestellt, dass die Branch-Namen als Tags verwendet werden.
- Den Befehlen âgit notes addâ und âgit notes appendâ wurde das Flag â-eâ hinzugefĂŒgt, das eine Notiz in einem externen Texteditor öffnet, der ĂŒber die Umgebungsvariable GIT_EDITOR angegeben wird.
- Die KompatibilitÀt mit GCC 15 und dem C23-Standard wurde verbessert.
- Die UnterstĂŒtzung fĂŒr Ă€ltere Versionen von libcURL und Perl wurde eingestellt.
Quelle: opennet.ru
