0%

Remotes, zonder server · oefening

De gedeelde repository klonen

origin.git bevat nu dezelfde geschiedenis van twee commits op main als garden. Een kloon maakt van die repository een nieuwe werkrepository met een eigen lokale branch, werkboom en remote-tracking refs.

Kloon de repository

git clone krijgt de locatie van een repository en een doelmap. Het maakt die doelmap, kopieert de bereikbare Git-geschiedenis, checkt een werkboom uit en legt de bron vast onder de gebruikelijke remotenaam origin.

De shellopdracht cd betekent change directory, van map veranderen. cd .. gaat omhoog naar de bovenliggende map, terwijl cd garden-copy de genoemde map binnen de huidige map ingaat. Het verandert waar latere opdrachten draaien; het verplaatst geen bestanden en wisselt geen Git-branches.

Ga eerst van /workspace/garden naar /workspace zodat alle drie de repositories naast elkaar staan. Kloon daarna vanuit het relatieve pad origin.git naar garden-copy en ga die nieuwe map in:

cd ..
git clone origin.git garden-copy
cd garden-copy

Deze kloon dient in dit hoofdstuk om te observeren: je bekijkt en fetcht erin, maar elke nieuwe commit maak je in de klaargezette repository garden.

Corrigeer de opgeslagen locatie van een remote

Bekijk wat de kloon heeft vastgelegd als origin en je vindt het volledige pad /workspace/origin.git, niet de origin.git die je typte. Git heeft het uitgebreid.

Dat is het waard om te corrigeren, en de opdracht daarvoor zul je vaker willen gebruiken. Repositories verhuizen: een project krijgt een andere plek op schijf, een server verandert van adres of een team stapt over op een andere host. Dan is de locatie onder origin simpelweg onjuist en corrigeer je die met git remote set-url. Die krijgt de naam van de remote en de vervangende locatie.

git remote set-url origin ../origin.git

Nu beschrijven beide repositories origin.git op dezelfde manier, als de map ernaast. Dit veranderde alleen een opgeslagen instelling: geen commit verschoof, geen bestand veranderde en de kloon wijst nog steeds naar dezelfde bare repository als zojuist.

Bekijk wat clone heeft gemaakt

Voer de uitgebreide remotelijst uit die je eerder leerde en lees daarna beide refs:

git remote -v
git log main
git log origin/main
git status

git remote -v hoort ../origin.git te tonen. De lokale main en origin/main beginnen allebei bij de meegeleverde commit List the first plants. De werkboom bevat README.md en plants.txt en is schoon.

De namen zijn lokaal voor deze kloon. Zijn main is niet de main van garden, en zijn origin/main is geen rechtstreekse weergave van de bare repository. Elke repository bewaart eigen refs. Ze komen nu overeen omdat het klonen de huidige toestand kopieerde.

Wat stelt origin/main binnen garden-copy direct na het klonen voor?

Drie repositories bewaren nu dezelfde twee commits en elk houdt daarvoor een eigen set namen bij. Die onafhankelijkheid is het hele doel van de opstelling en blijft precies zo lang onzichtbaar als alle drie overeenkomen. In de volgende les gaat er één vooruit.