Git-Repo nur teilweise klonen

Ich interessiere mich fĂĽr einen bestimmten Ordner in einem Git-Repository. Ich will aber nicht alles klonen. Gibt es einen Weg, nur einen Teil zu laden?

vorlesen Druckansicht
Lesezeit: 2 Min.

Ich interessiere mich fĂĽr den Inhalt eines bestimmten Ordners in einem Git-Repository. Einfach das ganze Repo zu klonen dauert ewig, weil es so groĂź ist. Gibt es einen Weg, nur einen Teil zu laden?

Ja, den gibt es, aber er ist ein bisschen kompliziert und ausdrücklich experimentell; die Git-Dokumentation warnt, dass sich das Verhalten in Zukunft ändern kann. Klonen Sie zunächst das Repository mit diesen Parametern:

git clone --depth=1 --filter=blob:none --sparse <URL>

--depth=1 bewirkt, dass der Klon seicht ("shallow") ist. Er bringt also nicht die gesamte Versionsgeschichte mit, sondern reicht nur einen Commit weit in die Vergangenheit.

Die Hauptarbeit macht --filter. Dieser Parameter fĂĽhrt dazu, dass nur ein teilweiser Klon entsteht ("partial clone"). Im Beispiel werden durch blob:none die eigentlichen Inhalte der Dateien im Repository nicht geklont, was die Sache enorm beschleunigt.

Schlussendlich weist --sparse die Versionsverwaltung an, keinen vollständigen Check-out nach dem Klonen durchzuführen. Bei so einem "sparse-checkout" stellt git erst mal nur die Dateien im Wurzelverzeichnis des Repositories zur Verfügung.

Nun haben Sie einen Klon des Repos, dem die meisten Inhalte fehlen. Um genau die nachzuladen, an denen Sie interessiert sind, wechseln Sie per cd in das Git-Repo und nutzen den sparse-checkout Befehl:

git sparse-checkout set "A/B/C"

Das Unterkommando set weist Git an, eine passende Sparse-Checkout-Konfiguration anzulegen und die angefragten Dateien (also alles unterhalb von A/B/C) im Arbeitsverzeichnis zur VerfĂĽgung zu stellen.

Wenn Sie mehr als einen Pfad benötigen, können Sie mit dem Unterkommando add weitere definieren:

git sparse-checkout add "X/Y"

Welche Pfade definiert sind, erfahren Sie per git sparse-checkout list.

(syt)