0%

Je eerste repository · oefening

Stel je identiteit in vóór de eerste commit

Je hebt een opgeslagen README.md in /workspace en gaat het onder versiebeheer zetten. Een paar begrippen dragen deze les. Je kunt ze beter nu leren kennen dan halverwege een opdracht.

Een repository is een projectmap waarvan Git de geschiedenis bijhoudt, in een verborgen administratie naast je bestanden. De bestanden die je bewerkt vormen de werkboom (working tree). Git legt veranderingen daarin niet automatisch vast: je kiest wat er in de volgende opgeslagen versie komt. Die selectie heet de staging area. Een commit is één momentopname van wat je hebt klaargezet, met een bericht dat uitlegt waarom. Samen vormen de commits de geschiedenis van het project.

Git koppelt ook een auteursidentiteit aan elke commit: een naam en een e-mailadres. Zo kan de geschiedenis vertellen wie wat deed. Dat is een instelling voor je eigen werk, geen account op een hostingwebsite. Daar begint deze les. De afbeelding toont links de werkboom (WORKING TREE) met het bewerkte bestand (EDITED FILE), in het midden de staging area voor de volgende commit (NEXT COMMIT), en rechts de geschiedenis (HISTORY) met een opgeslagen momentopname (SAVED SNAPSHOT). De pijlen tonen dat git add de huidige bestandsinhoud klaarzet en git commit die klaargezette momentopname vastlegt; het werkbestand blijft staan.

Een bewerkte README.md blijft in de werkboom staan; git add kopieert de huidige inhoud naar de staging area en git commit legt die klaargezette momentopname vast in de geschiedenis.

Waarom je identiteit eerst komt

Git kan de auteur van een commit niet verzinnen. Als er geen naam en geen e-mailadres zijn ingesteld, weigert het te committen en meldt het dat de auteursidentiteit onbekend is. Je beantwoordt die vraag voordat je de eerste commit van de repository maakt. Zo krijgt het eerste geschiedenisitem de bedoelde auteur.

Stel je identiteit in

git config leest en schrijft Gits instellingen. Elke instelling heeft een naam. De twee die je nodig hebt zijn user.name en user.email. Geef er een waarde aan en die wordt opgeslagen. Het deel --global bepaalt waar: in je Git-configuratie op gebruikersniveau, in plaats van in één repository. Ondanks dat woord wordt er niets ergens naartoe gestuurd.

Vervang beide voorbeeldwaarden door de naam en het adres die je aan je werk wilt koppelen. Een shell ziet een spatie normaal als de scheiding tussen twee argumenten. De aanhalingstekens houden een naam zoals Your Name bij elkaar als één waarde voor Git. Laat de aanhalingstekens staan en vervang de tekst ertussen. Het adres met .invalid is een voorbeeld voor deze les, geen identiteit om naar een echt project te kopiëren.

git config --global user.name "Your Name"
git config --global user.email "you@example.invalid"

De instelling geldt voor repositories die je als deze gebruiker gebruikt. Ze wordt niet opgeslagen in de repository die je zo gaat maken. Gebruik bij een gedeeld account of werkaccount de identiteit die het project verwacht, in plaats van deze voorbeeldwaarden over te nemen.

Noem een instelling zonder er een waarde bij te geven en Git toont de huidige waarde:

git config --global user.name
git config --global user.email

Maak de repository

Blijf in /workspace; maak geen andere projectmap. pwd toont in welke map de terminal staat. Voer het eerst uit om te controleren waar je bent. Daarna maakt git init van die map een repository, met de eerder beschreven verborgen administratie. Je bestanden blijven ongewijzigd. git status beschrijft de huidige toestand. Die opdracht zul je het vaakst gebruiken.

pwd
git init
git status

pwd hoort /workspace te tonen. Git noemt README.md untracked: het staat in de werkboom, maar er is nog niets van klaargezet in de staging area.

Zet het bestand klaar en kijk opnieuw

git add README.md zet de huidige inhoud van dat bestand in de staging area. Daarmee beantwoord je de vraag die git status net opriep. Er is nog niets in de geschiedenis van de repository terechtgekomen en er wordt niets verstuurd.

git add README.md
git status

Dezelfde opdracht noemt README.md nu staged, dus klaargezet. Het bestand is niet verplaatst of veranderd. Het staat nog steeds in je werkboom, klaar om opnieuw te bewerken. Nieuw is de kopie die Git voor de volgende commit heeft klaargezet. Door twee keer te kijken kun je het verschil zelf zien, in plaats van het aan te nemen.

Commit het bestand en lees de geschiedenis

git commit maakt de commit van alles wat is klaargezet. Zonder verdere opties opent het een teksteditor voor het bericht. Met -m geef je dat bericht direct mee: de tekst tussen aanhalingstekens is het bericht en er gaat geen editor open. Daarna leest git log de geschiedenis terug, met het nieuwste eerst.

git commit -m "Start the garden notes"
git log

Eén item, met de auteur, datum, je bericht en de identificatiecode die Git aan die momentopname gaf. Op de regel Author: staat de identiteit die je aan het begin instelde.

Die commit is lokaal. Er was geen account of netwerkverbinding bij betrokken. In latere hoofdstukken wissel je geschiedenis uit met andere repositories, maar voor deze eerste heb je alleen het project voor je nodig.

Je voerde git status uit, daarna git add README.md en daarna opnieuw git status. De twee antwoorden verschilden. Wat veranderde er tussendoor?

Eén commit vormt een geschiedenis van één item. In de volgende les wijzig je README.md opnieuw. Je ziet hoe Git hetzelfde bestand anders beschrijft, nu het iets heeft om mee te vergelijken.