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.

Git-Tutorial: Zusammenarbeit zwischen Repo und Arbeitskopie Git-Tutorial: Zusammenarbeit zwischen Repos

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

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/pfad/zu/mein-projekt.git
cd mein-projekt
# Arbeit am Projekt beginnen

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> <verzeichnis>

Hier wird das Repository unter <repo> in den Ordner ~<directory>! auf der lokalen Maschine 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 aktuellsten 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 Master Branch. Auf dieselbe Art kannst du auch einen Tag statt eines Branch angeben.

git clone -branch new_feature git://remoterepository.git

Im Beispiel oben wird nur der Branch new_feature aus dem Git-Remote-Repository geklont. Mit diesem Trick kannst du Zeit sparen. So musst nicht den HEAD-Ref des Repositorys herunterladen und dann zusätzlich den benötigten Ref abrufen.

"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/.
 

Summary

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.

 

Du möchtest mit Git arbeiten?

Sieh dir dieses interaktive Tutorial an.

Jetzt loslegen