Versionsverwaltung: Git 2.31 führt Maintenance im Hintergrund aus

Und mit der neuen rückläufigen Indizierung lassen sich gespeicherte Objekte wie Commits, Blobs und Bäume ausgehend von den Bytes der Packfiles ermitteln.

In Pocket speichern vorlesen Druckansicht 3 Kommentare lesen

(Bild: Den Rise/Shutterstock.com)

Lesezeit: 3 Min.
Von
  • Silke Hahn
Inhaltsverzeichnis

Die Quellcode-Versionsverwaltung Git ist in Version 2.31 erschienen. Neben zahlreichen Bugfixes ragen zwei größere Neuerungen heraus: Git erhält einen Wartungsmodus, der sich im Hintergrund ausführen lässt, während Entwickler weiterhin Interaktionen durchführen können. Aktivieren lässt sich die Hintergrundwartung wie folgt: $ git maintenance start.

Außerdem sollen sich die in den Packfiles indizierten Objekte nun ausgehend von den Bytes rückläufig zuordnen lassen. Dafür sorgt eine rückläufige Indexsuche (Reverse Index), die mit dem aktuellen Release erstmals zum lokalen Abspeichern als Reverse-Indexdatei verfügbar ist.

Git speichert alle Daten zunächst als "Objekte", die als Commits, Blobs und Trees den Inhalt der einzelnen Dateien enthalten. Das System für Versionskontrolle packt die Objekte dann in sogenannte Packfiles, das sind verkettete Objektströme. Auch die etablierten Befehle git fetch und git push nutzen diese Objektströme, um Objekte zu übertragen. Für den Zugriff auf jedes einzelne Objekt erstellt Git zu jedem Packfile einen Index (Dateiendung .idx). Ausgehend von der Indexdatei lässt sich eine Objekt-ID in den dazugehörigen Byte-Offset konvertieren. Bislang war das offenbar eine Einbahnstraße gewesen.

Mit dem neuen Release können Entwicklerinnen und Entwickler jedoch den umgekehrten Weg beschreiten und ausgehend von einem Byte im Packfile das referenzierte Objekt ausfindig machen. Zu diesem Zweck haben die Git-Entwickler einen Reverse Index eingeführt, der eine Verknüpfung zwischen jedem Bestandteil der Packfiles und dem damit referenzierten Objekt kartiert. In früheren Versionen war solch eine rückläufige Indizierung nur fallweise im Speicher möglich, nicht als lokal abspeicherbare Indexdatei, die man wiederverwendenkann. Das Erstellen eines Arrays von Objekt-Positions-Paaren und die Sortierung mussten Entwickler bislang aktiv anstoßen, was gerade bei umfangreichen Repositories viel Zeit verschlang.

Mehr zu Git

(Bild: Quick Shot/Shutterstock.com)

Ab Git 2.31 lässt sich der Reverse-Index in ein neues On-Disk-Format serialisieren, der rückläufige Index erhält dabei die Dateiendung .rev. Eine Einschränkung besteht offenbar noch: Git erzeugt .rev-Dateien noch nicht automatisch als Standardeinstellung. Wer den Reverse-Index benötigt, kann ihn ab sofort mit dem Befehl git config pack.writeReverseIndex true aktivieren und im zweiten Schritt mit der Eingabe git repack -Ad das gewünschte Repository neu packen.

Weitere Teile des git bisect-Unterbefehls sind im aktuellen Release in die Programmiersprache C umgeschrieben. Wenn der Umzug abgeschlossen ist, sollten Halbierungen (bisect operations) rascher ablaufen. Eine Reihe weiterer Änderungen umfasst zum Beispiel die FSMONITOR-Integration, und weitere Secure Hash Algorithms (SHA) der Gruppe SHA-1 sind zugunsten weiterer Hashfunktionen der Gruppe SHA-256 aus dem Verkehr gezogen. Im Zuge der Umbenennung von Master in Main sind weitere Zweige zu Main Branches umbenannt, und die als "GitClone" bezeichnete Schwachstelle gilt als bereinigt. Mit dieser Sicherheitslücke hätte sich Code aus der Ferne ausführen lassen können (remote code execution).

Interessierte finden eine vollständige Liste der Änderungen in den Release Notes der Mailingliste LKML.org. Flankierend ist eine Ankündigung im GitHub-Blog erschienen, die die größten Änderungen ausführlich beleuchtet.

(sih)