Wijzigingen van de repository

Als je een nieuw bestand aanmaakt in een Git werkmap (working directory) dan is dat bestand standaard “untracked”. Dat wil zeggen dat het wel in een Git werkmap staat maar Git trekt er zich absoluut niets van aan: er worden geen versies van bijgehouden, er wordt zelfs niet bijgehouden of dit bestand gewijzigd wordt. Bij het bekijken van de status van een project staan deze bestanden in de rubriek “Untracked files” (zoals het bestand a.txt uit de vorige oefening).

Tracked bestanden zijn bestanden waarvan Git het bestaan wel kent. Dit zijn bestanden die in de laatste snapshot zaten. Tracked files kennen 3 toestanden:

  • unmodified (ongewijzigd)

  • modified (gewijzigd)

  • staged (staat klaar om aan de volgende snapshot toegevoegd te worden)

Git levenscyclus

De status van je bestanden controleren

Met het commando git status kan je de status van je repo controleren. We hebben dit eerder al gedaan.

Wanneer er geen untracked bestanden zijn en ook geen tracked bestanden die sinds de laatste snapshot gewijzigd zijn krijg je volgend antwoord:

On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

Dit zou het geval moeten zijn voor "GitProject2".

Nieuwe bestanden volgen (tracking)

Om een nieuw bestand te beginnen te tracken, gebruik je het commando git add gevolgd door de bestands- of mapnaam. Je kan ook gebruik maken van wildcards om verschillende bestanden/mappen tegelijk toe te voegen.

Bestanden stagen

We hebben eerder in de cursus gezien: Alle bestanden die in de staging area staan, kunnen we later toevoegen aan de volgende snapshot.

Wanneer je een nieuw bestand begint te volgen (tracken) dan komt het in de "Staging area" terecht. Het bestand heeft dus toestand “Staged”.

Wanneer je een bestand dat zich reeds in een vorige snapshot bevindt wijzigt, komt het niet onmiddellijk in de "Staging area". Het kan immers zijn dat je wat aan het experimenteren bent, of dat je de gemaakte aanpassingen aan het bestand (nog) niet wilt opslaan. Wanneer je het gewijzigde bestand toch wil toevoegen aan de "Staging area" gebruik je opnieuw het commando git add.

Bestanden uit de vorige snapshot die nog niet gewijzigd zijn "Unmodified", zullen niet worden weergegeven wanneer je de status bekijkt. Gewijzigde bestanden "Modified" en bestanden die "Staged" zijn wel.

Bestanden negeren

Vaak zul je een aantal bestanden hebben waarvan je niet wilt dat Git deze automatisch toevoegt of zelfs maar als untracked toont. Om dit te doen maak je een bestand genaamd .gitignore, waarin je de bestandsnamen plaatst die je wilt negeren.

  • Gebruik voor elk nieuw te negeren bestand een nieuwe regel.

  • Je kan gebruik maken van wildcards.

Er zijn nog heel wat mogelijke patronen Git ignore patronen. Je vind er een heleboel van terug onderaan de Git Cheat Sheet.

Wijzigingen committen

Als je de staging area gevuld is zoals jij het wilt, kun je de wijzigingen committen met het commando. We hebben hiervoor enkele mogelijkheden:

  • Type "git commit. Hierna start de editor op die we in het begin hebben ingesteld (in ons geval Notepad++) met daarin een standaard boodschap die we zouden kunnen gebruiken. Alle regels zijn echter nog voorafgegaan door een #, waardoor deze genegeerd zullen worden. Wil je deze standaard boodschap gebruiken, verwijder dan overal de #. je kan uiteraard ook je eigen boodschap meegeven.

  • Type git commit -m “[boodschap]

  • Wanneer je een modified bestand onmiddellijk wilt committen zonder het eerst in de staging area te plaatsen kan dit ook met de -a optie. Type dan git commit -a -m “[boodschap]”.

Aanpassingen maken

Bestand verwijderen

Wanneer je een bestand uit de werkmap verwijdert zonder het git rm commando te gebruiken, blijft de verwijderde bestandsinformatie in de Git repository staan en wordt het bestand opgeslagen in de "untracked files". Het gebruik van "git rm" zorgt ervoor dat het bestand niet alleen uit de werkmap wordt verwijderd, maar ook uit de Git repository. Het bestand wordt dan opgeslagen in de Git repository als een verwijderd bestand.

Er zijn verschillende manieren om git rm te gebruiken, bijvoorbeeld:

  1. git rm [bestandsnaam] - hiermee verwijder je een specifiek bestand uit de werkmap en Git repository.

  2. git rm -r [directory] - hiermee verwijder je een directory en de inhoud ervan uit de werkmap en Git repository.

  3. git rm --cached [bestandsnaam] - hiermee verwijder je een bestand uit de Git repository maar niet uit de werkmap.

Na het uitvoeren van "git rm" moet je de wijzigingen committen om ze definitief te maken.

Een bestand verplaatsen/hernoemen

Een bestand verplaatsen of hernoemen kan met het git mv [bestandsnaam_old] [bestandsnaam_new] commando.

Je kan het bestand ook kopieren naar een bestand met een andere naam, je oud bestand verwijderen en het nieuwe bestand beginnen te volgen.

Een commit wijzigen.

Je kan een bestaande commit (snapshot) wijzigen met het commando git commit --amend. Je kan dit commando op 2 manieren gebruiken

  1. Je wilt enkel de boodschap bij de commit veranderen. Type dan deze code, de texteditor zal dan openen met daarin de commit boodschap die je geschreven hebt. Je kan deze aanpassen en opnieuw opslaan.

  2. Je wilt geen nieuwe commit maken, maar nog wat aangepaste bestanden toevoegen aan een reeds bestaande. Voeg dan eerst de aangepaste bestanden toe met git add en type de code. Je creëert geen nieuwe commit, maar past de laatste aan.

Een gestaged bestand unstagen

Vooraleer je een commit doet, moet je zeker zijn dat alle bestanden in de staging area mogen toegevoeg worden aan de nieuwe snapshot. Indien er bestanden zijn die we toch niet willen toevoegen, hebbben we 2 mogelijke commando's om een gestaged bestand uit de staging area te halen. Het ene commando is al wat ingrijpender dan de andere.

  1. git reset HEAD [bestandsnaam] zal het bestand uit de staging area halen, maar de wijzigingen in de working directory zullen bewaard blijven. Dit commando gebruik je dus wanneer je een bestand hebt aangepast en in de gestaged hebt. Je wilt de aanpassingen behouden, maar nog wat wijzigingen doorvoeren vooraleer je dit bestand wilt opnemen in de commit.

  2. git rm --cached [bestandsnaam] zal het bestand uit de staging area halen, maar ook alle wijzigingen sinds de laatste commit teniet doen.

Een gewijzigd bestand weer ongewijzigd maken

Bestanden die we gewijzigd hebben, die niet in de staging area staan en waarvan we de wijziging niet willen behouden, brengen we terug naar hun toestand van de laatste commit met het commando git checkout -- [bestandsnaam].

Oefeningen

Voor de volgende oefening maak je gebruik van volgende site:

Alle Pokemon per generatie

Voor deze oefeningen kan je bestanden/mappen uiteraard ook aanmaken/aanpassen vanuit de verkenner. Dit hoeft niet (tenzij expliciet opgegeven) vanuit CMD.

  1. Maak een nieuwe map "Pokemon" aan.

  2. Zorg ervoor dat deze map een Git repo wordt.

  3. Gebruik het commando echo om in deze map het bestand "Readme.md" met daarin de tekst "info Pokemon" aan te maken. Maak ook het lege bestand "InfoVoorMezelf.md" aan.

  4. Zorg ervoor dat het bestand "InfoVoorMezelf.md" genegeerd wordt door Git.

  5. Bekijk de status van het project.

  6. Maak het bestand "Generation1.csv".

  7. Volg alle bestanden (behalve deze die genegeerd moeten worden natuurlijk).

  8. Maak een commit (1) met als mededeling "Generation1 toegevoegd".

  9. Maak de bestanden "Generation2.csv", "Generation3.csv" en "Generatie4.csv" (zorg ervoor dat het laatste bestand de Nederlandse benaming heeft!) aan en volg deze door gebruik te maken van 1 regel code.

  10. Bekijk de status van het project.

  11. Maak een nieuwe commit (2) met als mededeling "Generaties 2-4 toegevoegd".

  12. Vul het nummer en de naam van de eerste 5 Pokemon van de eerste generatie in. Dit is een .csv bestand, zorg dus voor de juiste structuur.

  13. Bekijk de status van het project.

  14. Maak een commit (3) met als mededeling "Eerste 5 Pokemon Gen1 toegevoegd". (vergeet de tussenstap niet!)

  15. We merken nu dat we het type Pokemon vergeten toevoegen zijn. Pas het bestand "Generation1.csv" dus aan met het type (bij 2 types, geef je ze allebei, gescheiden door "/"). We maken nu geen nieuwe commit, maar voegen deze wijzigingen toe aan de laatste commit (3). Voeg ook aan de mededeling toe "nr, naam en type".

  16. Voeg nu ook de eerste 5 Pokemon van de generaties 2-4 toe en maak een commit (4) met als tekst "5 Pokemon in generatie 2-4".

  17. Pas de naam van het bestand "Generatie4.csv" aan door "Generation4.csv" en maak een nieuw commit (5) met als tekst "Generatie4 -> Generation4"

Last updated