git clone
Hier gehen wir ausführlich auf den Befehl git clone
ein. Der Befehl git clone
dient dazu, ein vorhandenes Repository als Ziel festzulegen und einen Klon oder eine Kopie des Ziel-Repositorys zu erstellen. Auf dieser Seite behandeln wir erweiterte Konfigurationsoptionen und allgemeine Verwendungszwecke von git clone
. Dazu gehört u. a. Folgendes:
- Klonen eines lokalen oder Remote-Repositorys
- Klonen eines Bare-Repositorys
- Einfache Optionen zum Teilklonen von Repositorys
- Git-URL-Syntax und unterstützte Protokolle
Im Leitfaden zum Einrichten eines Repositorys erläutern wir einen einfachen Use Case von git clone
. Auf dieser Seite geht es um komplexere Klon- und Konfigurationsszenarien.
Ziel: Entwicklungskopie zur Zusammenarbeit zwischen Repositorys
Wenn ein Projekt bereits in einem zentralen Repository eingerichtet wurde, ist der Befehl git clone
für Benutzer die gängigste Art, eine Entwicklungskopie zu erstellen. Genau wie git init
ist das Klonen im Allgemeinen ein einmaliger Vorgang. Sobald ein Entwickler eine Arbeitskopie erhalten hat, werden alle Versionskontrollvorgänge und die Zusammenarbeit über sein lokales Repository verwaltet.
Zusammenarbeit zwischen Repos
Es ist wichtig zu verstehen, dass "Arbeitskopien" in Git völlig anders funktionieren als Arbeitskopien, die du beim Checkout von Code aus einem SVN-Repository erhältst. Im Gegensatz zu SVN unterscheidet Git nicht zwischen Arbeitskopien und dem zentralen Repository – alle sind vollwertige Git-Repositorys.
Damit ist die Zusammenarbeit mit Git grundsätzlich anders als mit SVN. Während es bei SVN auf das Verhältnis zwischen zentralem Repository und Arbeitskopie ankommt, basiert die Zusammenarbeit mit Git auf der Interaktion zwischen Repositorys. Statt eine Arbeitskopie in ein zentrales SVN-Repository auszuchecken, pushst oder pullst du Commits von einem Repository in ein anderes.
Zugehöriges Material
git branch
Lösung anzeigen
Git kennenlernen mit Bitbucket Cloud
Natürlich kannst du bestimmten Git-Repositorys auch eine besondere Rolle zuweisen. Wenn du etwa ein Git-Repository als "zentrales" Repository definierst, kannst du einen zentralen Workflow mithilfe von Git replizieren. Das wird aber vielmehr durch Festlegungen und nicht durch Vorgaben des VCS selbst erreicht.
Anwendung von "git rebase"
git clone
wird vor allem genutzt, um auf ein bestehendes Repository zu verweisen und in einem neuen Verzeichnis unter einem neuen Speicherort einen Klon oder eine Kopie dieses Repositorys zu erstellen. Das ursprüngliche Repository kann im lokalen Dateisystem oder in unterstützten Protokollen gespeichert werden, auf die Remote-Maschinen zugreifen können. Mit dem Befehl git clone
kopierst du ein bestehendes Git-Repository. Das Ergebnis ist ähnlich wie beim SVN-Checkout, nur ist die "Arbeitskopie" hier ein vollwertiges Git-Repository mit eigenem Verlauf, eigenem Dateimanagement und einer vom ursprünglichen Repository komplett isolierten Umgebung.
Ein zusätzlicher Vorteil: Beim Klonen wird automatisch eine Remote-Verbindung namens "origin" erstellt, die auf das ursprüngliche Repository zurückverweist. Das macht die Interaktion mit einem zentralen Repository sehr einfach. Um diese automatische Verbindung herzustellen, werden Git-Refs an den Heads des Remote-Branches unter refs/remotes/origin
erstellt und die Konfigurationsvariablen remote.origin.url
und remote.origin.fetch
initialisiert.
Ein Anwendungsbeispiel für git clone
findest du im Leitfaden zum Einrichten eines Repositorys. Das folgende Beispiel veranschaulicht, wie du eine lokale Kopie des zentralen Repositorys erhältst, die auf einem Server abgelegt wurde, der mit dem SSH-Benutzernamen john über example.com
zugänglich ist.
git clone ssh://john@example.com/path/to/my-project.git
cd my-project
# Start working on the project
Mit dem ersten Befehl wird ein neues Git-Repository auf deiner lokalen Maschine im Ordner mein-projekt
angelegt, das zudem die Inhalte des zentralen Repositorys enthält. Dann kannst du mit dem Befehl cd zum Projekt wechseln und damit beginnen, Dateien zu bearbeiten, Snapshots zu committen und mit anderen Repositorys zu interagieren. Beachte auch, dass die Erweiterung .git
im geklonten Repository wegfällt. So erkennt man, dass die lokale Kopie kein Bare-Repository ist.
In einen bestimmten Ordner klonen
git clone <repo> <directory>
Hier wird das Repository unter <repo>
in den Ordner ~<directory>!
auf dem lokalen Rechner geklont.
Einen bestimmten Tag klonen
git clone --branch <tag> <repo>
Dieser Befehl klont das Repository unter <repo>
und nur den Ref für <tag>
.
Flacher Klon
git clone -depth=1 <repo>
Dieser Befehl klont das Repository unter <repo>
und nur den Verlauf der Commits, die durch die Option depth=1 festgelegt sind. In diesem Beispiel wird ein Klon von <repo>
erstellt. Dabei enthält das neue geklonte Repository nur den aktuellen Commit. Das Erstellen flacher Klone ist vor allem dann nützlich, wenn Repositorys einen umfangreichen Commit-Verlauf haben. Ein umfangreicher Commit-Verlauf kann die Skalierung beeinträchtigen, etwa durch beschränkte Festplattenspeichernutzung und lange Wartezeiten beim Klonen. Mit einem flachen Klon kannst du diese Skalierungsprobleme entschärfen.
Konfigurationsoptionen
git clone -branch
Mit dem Argument -branch
kannst du statt des Branch, auf den der Remote-HEAD
verweist, einen bestimmten Branch zum Klonen angeben – normalerweise ist dies der Main-Branch. Auf dieselbe Art kannst du auch einen Tag statt eines Branch angeben.
git clone --branch
"git clone -mirror" im Vergleich mit "git clone -bare"
git clone --bare
Wenn du das Argument -bare
auf git clone
anwendest, wird ähnlich wie mit git init --bare
eine Kopie des Remote-Repositorys erstellt und das Arbeitsverzeichnis dabei außen vor gelassen. Das bedeutet, dass ein Repository mitsamt dem Projektverlauf eingerichtet wird, in das bzw. aus dem Pushen und Pullen möglich ist, das aber nicht direkt bearbeitet werden kann. Mit dem -bare
-Repository werden außerdem keine Remote-Branches für das Repository konfiguriert. Wie auch mit git init --bare
erstellst du so ein gehostetes Repository, das Entwickler nicht direkt bearbeiten können.
git clone --mirror
Mit dem Argument --mirror
wird implizit auch das Argument --bare
angewendet. Das bedeutet, dass --mirror
das Verhalten von --bare
erbt. Das Ergebnis ist ein Bare-Repository, dessen Arbeitsdateien nicht bearbeitbar sind. Mit --mirror
werden außerdem alle erweiterten Refs des Remote-Repositorys geklont und die Tracking-Konfiguration für Remote-Branches beibehalten. Wenn du das git remote
-Update für den Mirror durchführst, werden alle Refs aus dem "origin"-Repository überschrieben. Die Funktionen sind dabei exakt "gespiegelt".
Weitere Konfigurationsoptionen
Eine umfassende Liste weiterer "git clone"-Vorgänge findest du in der offiziellen Git-Dokumentation. In diesem Dokument werden wir kurz auf einige andere allgemeine Optionen eingehen.
git clone --template
git clone --template=<template_directory> <repo location>
Dieser Befehl klont das Repository unter <repo location>
und wendet die Vorlage aus <template directory>
auf den neu erstellten lokalen Branch an. Ausführliche Informationen zu Git-Vorlagen findest du auf unserer Seite zu git init.
Git-URLs
Git hat eine eigene URL-Syntax, um Speicherorte von Remote-Repositorys in Git-Befehle einzubauen. Wir befassen uns hier mit Git-URL-Syntax, da git clone
meistens für Remote-Repositorys genutzt wird.
Git-URL-Protokolle
'– SSH
Secure Shell (SSH) ist ein allgegenwärtiges authentifiziertes Netzwerkprotokoll, das auf den meisten Servern standardmäßig installiert ist. Da SSH ein authentifiziertes Protokoll ist, musst du vor dem Verbindungsaufbau die Anmeldedaten für den Hostingserver festlegen. ssh://[user@]host.xz[:port]/path/to/repo.git/
'– GIT
Ein spezielles Git-Protokoll. Git verfügt über einen Daemon, der auf Port (9418) ausgeführt wird. Das Protokoll ist vergleichbar mit SSH, nur OHNE AUTHENTIFIZIERUNG. git://host.xz[:port]/path/to/repo.git/
'– HTTP
Hypertext-Übertragungsprotokoll. Das ist das wichtige Protokoll im Internet, das meistens zur Übertragung von HTML-Daten von Webseiten verwendet wird. Git kann zur Kommunikation über HTTP konfiguriert werden: http[s]://host.xz[:port]/path/to/repo.git/.
Zusammenfassung
In diesem Tutorial haben wir einen genauen Blick auf git clone
geworfen. Die wichtigsten Punkte:
1. git clone
wird verwendet, um eine Kopie eines Ziel-Repositorys zu erstellen.
2. Das Ziel-Repository kann lokal oder remote sein.
3. Git unterstützt einige Netzwerkprotokolle zur Integration mit Remote-Repositorys.
4. Es stehen viele verschiedene Konfigurationsoptionen zur Verfügung, die den Inhalt des Klons ändern.
Weitere, ausführlichere Informationen zu den Funktionen von git clone
findest du in der offiziellen Git-Dokumentation. Praktische Beispiel zu "git clone" behandeln wir in unserem Leitfaden zum Einrichten eines Repositorys.
Diesen Artikel teilen
Nächstes Thema
Lesenswert
Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.