git clone

Hier zullen we de opdracht git clone grondig bekijken. git clone is een Git-opdrachtregelhulpprogramma dat wordt gebruikt om een bestaande repository te targeten en een kloon of kopie van de doelrepository te maken. Op deze pagina bespreken we uitgebreide configuratieopties en veelvoorkomende toepassingsscenario's van git clone. We behandelen hier onder meer de volgende punten:

  • Een lokale of externe repository klonen
  • Een bare repository klonen
  • Ondiepe opties gebruiken om repositories gedeeltelijk te klonen
  • Git URL-syntaxis en ondersteunde protocollen

In de gids voor het instellen van een repository hebben we basaal gebruik van git clone behandeld. Op deze pagina bekijken we complexere kloon- en configuratiescenario's.

Doel: kopie van gezamenlijke repo-to-repo-ontwikkeling

Als een project al in een centrale repository is opgezet, is de opdracht git clone de meest gebruikelijke manier voor gebruikers om een ontwikkelingskopie te verkrijgen. Net als git init is klonen over het algemeen een eenmalige bewerking. Zodra een ontwikkelaar een werkkopie heeft verkregen, worden alle bewerkingen voor versiebeheer en samenwerkingen beheerd via de lokale repository.

Repo-to-repo-samenwerking

Het is belangrijk om te begrijpen dat Gits opvatting van een 'werkkopie' heel anders is dan de werkkopie die je krijgt door code uit een SVN-repository uit te checken. Git maakt, in tegenstelling tot SVN, geen onderscheid tussen de werkkopie en de centrale repository — het zijn allemaal volwaardige Git-repository's.

Dit maakt de samenwerking met Git fundamenteel anders dan met SVN. SVN is afhankelijk van de relatie tussen de centrale repository en de werkkopie, maar het samenwerkingsmodel van Git is gebaseerd op interactie tussen repository's. In plaats van een werkkopie te controleren in de centrale repository van SVN, push of pull je commits van de ene repository naar de andere.

Git-tutorial: Repo om samen te werken aan een werkkopie Git-tutorial: Repo-to-repo-samenwerking

Natuurlijk weerhoudt niets je ervan om bepaalde Git-repo's een speciale betekenis te geven. Door bijvoorbeeld simpelweg één Git-repo aan te wijzen als de 'centrale' repository kun je een gecentraliseerde workflow repliceren met behulp van Git. Het punt is dat dit wordt bereikt door middel van conventies in plaats van echte programmering in de VCS zelf.

Gebruik

git clone wordt voornamelijk gebruikt om naar een bestaande repo te verwijzen en een kloon of kopie van die repo te maken in een nieuwe map, op een andere locatie. De oorspronkelijke repository kan zich bevinden op het lokale bestandssysteem of op een externe computer die toegankelijk is door middel van ondersteunde protocollen. De opdracht git clone kopieert een bestaande Git-repository. Dit is een soort SVN-checkout, maar de 'werkkopie' is een volwaardige Git-repository: hij heeft een eigen geschiedenis, beheert zijn eigen bestanden en is een volledig geïsoleerde omgeving van de oorspronkelijke repository.

Klonen dient het gemak, maar maakt automatisch een externe verbinding met de naam 'origin', die terugverwijst naar de oorspronkelijke repository. Dit maakt het heel gemakkelijk om te communiceren met een centrale repository. Deze automatische verbinding wordt tot stand gebracht door Git-refs te maken naar de koppen van de externe branches onder refs/remotes/origin en door de configuratievariabelen remote.origin.url en remote.origin.fetch te initialiseren.

Een voorbeeld van het gebruik van git clone is te vinden in de handleiding voor het instellen van een repository. Het onderstaande voorbeeld laat zien hoe je een lokale kopie kunt verkrijgen van een centrale repository die is opgeslagen op een server die toegankelijk is op example.com. Daarbij wordt de SSH-gebruikersnaam 'john' gebruikt:

git clone ssh://john@example.com/path/to/my-project.git 
cd my-project 
# Start working on the project

De eerste opdracht initialiseert een nieuwe Git-repository in de map my-project op je lokale systeem en vult deze met de inhoud van de centrale repository. Vervolgens kunt je cd uitvoeren in het project en beginnen met het bewerken van bestanden, het maken van snapshots en interactie met andere repository's. Merk ook op dat de .git-extensie wordt weggelaten uit de gekloonde repository. Dit weerspiegelt de non-bare status van de lokale kopie.

Klonen naar een specifieke map

git clone <repo> <directory>

Kloon de repository op <repo> in de map met de naam ~<directory>! op de lokale machine.

Een specifieke tag klonen

git clone --branch <tag> <repo>

Kloon de repository op <repo> en kloon alleen de ref voor <tag>.

Ondiepe kloon

git clone -depth=1 <repo>

Kloon de repository op <repo> en kloon alleen de
geschiedenis van commits die zijn gespecificeerd door de optie 'depth=1'. In dit voorbeeld wordt een kloon van < repo> gemaakt en wordt alleen de meest recente commit opgenomen in de nieuw gekloonde repo. Ondiep klonen is het nuttigst wanneer je werkt met repo's met een uitgebreide commit-geschiedenis. Een uitgebreide commit-geschiedenis kan schaalproblemen veroorzaken, zoals limieten voor het gebruik van schijfruimte en lange wachttijden bij het klonen. Een ondiepe kloon kan deze schaalproblemen helpen verlichten.

Configuratie-opties

git clone -branch

Met het argument -branch kun je een specifieke branch opgeven om te klonen in plaats van de branch waarnaar de externe HEAD verwijst (meestal de hoofd-branch). Daarnaast kun je voor hetzelfde effect een tag doorgeven in plaats van de branch.

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

Dit bovenstaande voorbeeld zou alleen de branch new_feature klonen van de externe Git-repository. Dit is puur bedoeld om je tijd te besparen bij het downloaden van de HEAD-ref van de repository, om vervolgens de ref die je nodig hebt ook nog te moeten ophalen.

git clone -mirror of git clone -bare

git clone --bare

Net als bij git init --bare wordt een kopie van de externe repository gemaakt met een weggelaten werkmap wanneer het argument -bare wordt doorgegeven aan git clone. Dit betekent dat er een repository wordt opgezet met de geschiedenis van het project, die kan worden gepusht en verwijderd, maar niet direct kan worden bewerkt. Bovendien worden er geen externe branches voor de repo geconfigureerd met de -bare repository. Net als git init --bare wordt dit gebruikt om een gehoste repository te maken die ontwikkelaars niet rechtstreeks zullen bewerken.

git clone --mirror

Als het argument --mirror wordt doorgegeven, wordt ook impliciet het argument --bare doorgegeven. Dit betekent dat het gedrag van --bare wordt overgenomen door --mirror. Dit resulteert in een bare repo zonder bewerkbare werkbestanden. Bovendien zal --mirror alle uitgebreide verwijzingen van de externe repository klonen en de volgconfiguratie van de externe branch behouden. Je kunt dan een git remote-update uitvoeren op de mirror, die alle verwijzingen van de oorspronkelijke repo zal overschrijven. Je hebt dus je exacte 'gespiegelde' functionaliteit.

Andere configuratie-opties

Ga voor een uitgebreide lijst met andere git clone-opties naar de officiële Git-documentatie. In dit document bespreken we enkele andere veelvoorkomende opties.

git clone --template

git clone --template=<template_directory> <repo location>

Kloont de repo op < repo-locatie> en past de sjabloon uit <sjabloonmap> toe op de nieuw gemaakte lokale branch. Een grondige verwijzing naar Git-sjablonen is te vinden op onze git init-pagina.

Git-URL's

Git heeft een eigen URL-syntaxis die wordt gebruikt om externe repository-locaties door te geven aan Git-opdrachten. Omdat git clone het meest wordt gebruikt op externe repositories, zullen we hier de Git URL-syntaxis bestuderen.

Git URL-protocollen

-SSH

Secure Shell (SSH) is een alomtegenwoordig geverifieerd netwerkprotocol dat gewoonlijk standaard op de meeste servers is geconfigureerd. Omdat SSH een geverifieerd protocol is, moet je inloggegevens instellen bij de hostingserver voordat je verbinding maakt. ssh://[gebruiker@]host.xz[:poort]/pad/naar/repo.git/

- GIT

Een protocol dat uniek is voor git. Git wordt geleverd met een daemon die draait op poort (9418). Het protocol is vergelijkbaar met SSH, maar het heeft GEEN AUTHENTICATIE. git://host.xz[:poort]/pad/naar/repo.git/

- HTTP

Hyper text transfer protocol. Het protocol van het web, meestal gebruikt voor het overbrengen van HTML-gegevens van een webpagina via internet. Git kan worden geconfigureerd om te communiceren via HTTP http[s]://host.xz[:port]/pad/naar/repo.git/

Samenvatting

In dit document gingen we diep in op git clone. De belangrijkste leerpunten zijn:

1. git clone wordt gebruikt om een kopie van een doelrepo te maken;

2. De doelrepo kan lokaal of op afstand zijn;

3. Git ondersteunt een paar netwerkprotocollen om verbinding te maken met externe repo's;

4. Er zijn veel verschillende configuratieopties beschikbaar die de inhoud van de kloon wijzigen.

Raadpleeg voor meer informatie over git clone-functionaliteit de officiële Git-documentatie. We behandelen ook praktische voorbeelden van git clone in onze handleiding voor het instellen van een repository.

Klaar om Git te leren?

Probeer deze interactieve tutorial.

Nu aan de slag