Git Shallow Clone: Was es ist, wann man es nutzt und wie es funktioniert

Ein Repository mit git clone
zu klonen bedeutet normalerweise, dass die gesamte Commit-Historie heruntergeladen wird. Aber was, wenn Sie nicht die komplette Historie benötigen? Hier kommen Shallow Clones ins Spiel. In diesem Artikel erklären wir, was ein Shallow Clone ist, wie er funktioniert und wann es sinnvoll ist, ihn zu verwenden — mit kopierbereiten Beispielen.
Die wichtigsten Punkte
- Ein Shallow Clone begrenzt die Menge an Historie, die während
git clone
abgerufen wird - Ideal für CI, große Repositories oder schnelle Einrichtungen
- Erfahren Sie, wie man
--depth
,--single-branch
und--shallow-since
verwendet
Was ist ein Shallow Clone in Git?
Ein Shallow Clone ist ein Git-Clone, der nur einen Teil der Repository-Historie abruft, anstatt alles von Anfang an zu laden. Dies reduziert die Download-Größe und -Zeit erheblich. Es ist besonders nützlich, wenn:
- Sie nicht die vollständige Commit-Historie benötigen
- Sie eine schnellere Einrichtung für CI/CD-Pipelines wünschen
- Sie mit großen Repositories arbeiten
Shallow Clone vs. normaler Clone
Funktion Normaler Clone Shallow Clone Lädt gesamte Historie Ja Nein (begrenzte Commits) Clone-Geschwindigkeit Langsamer Schneller Git-Operationen (rebase, bisect) Vollständig unterstützt Einige Einschränkungen Ideal für CI/CD Nicht optimal Ja
Wie führt man einen Shallow Clone durch
Nur den neuesten Commit klonen
git clone --depth=1 https://github.com/owner/repo.git
Einen bestimmten Branch mit begrenzter Historie klonen
git clone --depth=1 --branch main --single-branch https://github.com/owner/repo.git
Commits seit einem bestimmten Datum klonen
git clone --shallow-since="2024-01-01" https://github.com/owner/repo.git
Sie können auch --filter=blob:none
mit partiellen Clones verwenden, wenn Sie das Herunterladen großer Dateien komplett überspringen möchten.
Kann man einen Shallow Clone nachträglich vertiefen?
Ja. Wenn Sie später feststellen, dass Sie die vollständige Historie benötigen:
git fetch --unshallow
Dies lädt die fehlenden Commits nach und wandelt Ihren Shallow Clone in einen vollständigen Clone um.
Wann sollte man einen Shallow Clone verwenden?
Verwenden Sie einen Shallow Clone, wenn:
- Sie nur die neueste Version des Codes benötigen
- Sie CI-Pipelines ausführen und schnellere Builds wünschen
- Sie Code überprüfen oder testen, ohne die vollständige Historie zu benötigen
Vermeiden Sie Shallow Clones, wenn:
- Sie
git bisect
,git rebase
oder Merge-Operationen durchführen müssen - Sie Änderungen beitragen und Zugriff auf die Commit-Historie benötigen
- Sie Tools entwickeln, die vom vollständigen Repository-Kontext abhängen
Häufige Probleme mit Shallow Clones
Git-Operationen können fehlschlagen
Einige Befehle setzen die vollständige Historie voraus und werfen Fehler in Shallow Clones:
git merge-base
git rebase
git bisect
Lösung: Führen Sie git fetch --unshallow
aus oder vermeiden Sie Shallow Clones in diesen Kontexten.
Shallow Clones können Monorepo-Tools beeinträchtigen
Tools wie Lerna oder Nx setzen möglicherweise voraus, dass sie vollen Zugriff auf die Commit-Historie des Repositories haben, um Abhängigkeitsgraphen oder betroffene Pakete zu ermitteln. Testen Sie mit Ihrem spezifischen Toolset.
Fazit
Shallow Clones sind eine hervorragende Möglichkeit, Entwicklungs-Workflows zu beschleunigen, besonders in CI-Umgebungen oder bei der Arbeit mit großen Repositories. Seien Sie sich nur der Kompromisse bewusst — und Sie können später jederzeit ein “unshallow” durchführen, falls nötig.
FAQs
Ja. Er lädt weniger Commits, daher ist er schneller beim Herunterladen und Verarbeiten, besonders bei großen Repositories.
Ja, aber einige historienbezogene Operationen können fehlschlagen, wenn der Clone nicht vorher mit 'unshallow' erweitert wurde.
Führen Sie `git fetch --unshallow` aus, um Ihr Repository in einen vollständigen Clone umzuwandeln.
Ja — tatsächlich verwendet GitHub Actions standardmäßig Shallow Clones (mit `fetch-depth: 1`).