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 aan 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 lege repository klonen
- Ondiepe opties gebruiken om repository's 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.
gerelateerd materiaal
Git-branch
Oplossing bekijken
Git leren met Bitbucket Cloud
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 aan 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 aan 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 extensie .git
is 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
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 repository -bare
. Net als git init --bare
wordt dit gebruikt om een gehoste repository aan 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 aangemaakte 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 toegangsgegevens 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 aan 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.
Deel dit artikel
Volgend onderwerp
Aanbevolen artikelen
Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.