HOWTO · Git

Clone-Unterverzeichnis des Git-Repositorys

In diesem Tutorial geht es um das Klonen eines Unterverzeichnisses des Git-Repositorys.

Auf dieser Seite

Um mit einem Verzeichnis aus einem Git-Projekt zu arbeiten, kannst du mit sparse-checkout die Pfade für den Arbeitsbaum auswählen. So bleibt die Arbeit im ursprünglichen Repository; es entsteht kein separates Repository, das nur dieses Verzeichnis enthält.

Was Sparse Checkout leistet (und was nicht)

Bei einem normalen Klon werden die Dateien des Repositorys in einen Arbeitsbaum ausgecheckt. Mit Git sparse-checkout kannst du auswählen, welche getrackten Pfade dort ausgefüllt werden. Der Checkout bleibt dabei mit demselben Repository und seiner Historie verbunden. Das ist nützlich, wenn du hauptsächlich an einem Modul arbeiten möchtest, etwa an frontend in einem Projekt, das auch die Verzeichnisse backend und documentation enthält.

Die Auswahl von Pfaden garantiert keinen kleineren Download. Sparse Checkout steuert den Arbeitsbaum; wie viele Repository-Daten abgerufen werden, hängt von den Klonoptionen und der Git-Konfiguration ab. Wenn du ein eigenständiges Projekt mit eigener Historie benötigst, muss das Quellprojekt für dieses Modul ein separates Repository bereitstellen.

Ein Repository mit Sparse Checkout klonen

Prüfe zuerst, ob die installierte Git-Version den Befehl sparse-checkout bereitstellt, zum Beispiel mit git help -a. Verwende die folgenden Befehle nur, wenn diese Schnittstelle verfügbar ist. Sie klonen das Repository, ohne den Arbeitsbaum auszufüllen, und wählen anschließend frontend aus. Ersetze die Beispiel-Repository-URL und die Verzeichnisnamen durch deine eigenen Werte; die URL und die Pfade unten sind Platzhalter.

Dieses eigenständige Bash-Beispiel erstellt ein kleines lokales Repository und wählt dessen Verzeichnis frontend aus:

set -eu
work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT

git init --quiet "$work/source"
git -C "$work/source" config user.name "Example User"
git -C "$work/source" config user.email "example@example.com"
mkdir -p "$work/source/frontend" "$work/source/backend"
printf 'app source\n' > "$work/source/frontend/app.txt"
printf 'service source\n' > "$work/source/backend/service.txt"
git -C "$work/source" add frontend backend
git -C "$work/source" commit -m "Add project modules" >/dev/null
branch=$(git -C "$work/source" branch --show-current)

git clone --no-checkout --branch "$branch" "$work/source" "$work/project" >/dev/null 2>&1
git -C "$work/project" sparse-checkout init --cone
git -C "$work/project" sparse-checkout set frontend
git -C "$work/project" sparse-checkout list
frontend

Für ein entferntes Projekt lauten die entsprechenden Schritte git clone --no-checkout <repository-url> my_project, cd my_project, git sparse-checkout init --cone und git sparse-checkout set frontend. Führe sie der Reihe nach aus. Die ausgewählten Pfade beziehen sich auf das Stammverzeichnis des Repositorys. Die unveränderte Ausgabe des lokalen Beispiels lautet frontend; diese Bezeichnung bleibt Englisch. Wenn deine Git-Installation sparse-checkout nicht bereitstellt, verwende stattdessen git clone <repository-url> my_project, um den vollständigen Arbeitsbaum zu erhalten.

Ausgewählte Verzeichnisse ändern

Um die ausgewählten Pfade durch backend und documentation zu ersetzen, führe im Repository git sparse-checkout set backend documentation aus. Wenn frontend ausgewählt bleiben und ein weiteres Verzeichnis hinzukommen soll, verwende git sparse-checkout add backend. Der Cone-Modus ist für die Auswahl von Verzeichnissen gedacht. Gib daher Verzeichnispfade statt einzelner Dateien an.

Verwende Pfade relativ zum Stammverzeichnis des Repositorys und achte auf dieselbe Schreibweise und Groß-/Kleinschreibung wie bei den getrackten Pfaden. Wenn die Auswahl nicht die erwarteten Dateien anzeigt, prüfe mit git ls-tree --name-only HEAD die Einträge im obersten Verzeichnis und lege anschließend das richtige Verzeichnis fest. Ein verschachtelter Pfad lässt sich auswählen, indem du seinen Pfad vom Stammverzeichnis aus angibst, zum Beispiel frontend/components.

Checkout überprüfen und häufige Probleme beheben

Führe git sparse-checkout list aus, um die ausgewählten Pfade anzuzeigen, und git status --short, um den Arbeitsbaum zu prüfen. Mit git rev-parse --show-toplevel kannst du bestätigen, dass du dich im gewünschten Repository befindest. Die ausgewählten Verzeichnisnamen beziehen sich auf dessen Stammverzeichnis.

Wenn der Befehl nicht verfügbar ist, die sparse-checkout-Schnittstelle von deiner Git-Installation nicht unterstützt wird oder der Repository-Ablauf ihre Verwendung nicht zulässt, verwende einen vollständigen Klon. Ist das Verzeichnis ausgewählt, aber erwartete Dateien fehlen, prüfe, ob der Pfad im ausgecheckten Commit vorhanden und korrekt geschrieben ist. Nicht getrackte Dateien, die bereits im Arbeitsbaum liegen, können auch dann sichtbar bleiben, wenn ihre Pfade außerhalb der sparse-Auswahl liegen.

Weitere Informationen findest du in der Git-Dokumentation zu sparse-checkout, der Dokumentation zu git clone und der Dokumentation zu git help.