Wijzigingen van de repository
Last updated
Last updated
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)
Met het commando git status
kan je de status van je repo controleren. We hebben dit eerder al gedaan.
Controleer de status nogmaals voor de projecten "GitProject1" en "GitProject2" en vergelijk het resultaat.
Wanneer er geen untracked bestanden zijn en ook geen tracked bestanden die sinds de laatste snapshot gewijzigd zijn krijg je volgend antwoord:
Dit zou het geval moeten zijn voor "GitProject2".
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.
Wanneer je een folder/map volgt, volg je automatisch ALLES wat in die map zit. Voeg je later bestanden toe aan die map dan worden die standaard niet gevolgd. Deze moeten dan nog apart worden toegevoegd.
Ga naar de map "GitProject1".
Begin het bestand test.txt te tracken.
Controleer de status.
Voeg de bestanden a.txt, b.txt en c.txt toe aan deze map.
Controleer de status.
Begin deze 3 nieuwe bestanden te tracken. Doe dit met 1 regel code (gebruik dus wildcards!).
Controleer de status.
Voeg de bestanden r.txt en Readme.md toe aan de map.
Begin deze 2 nieuwe bestanden te tracken. Doe dit met 1 regel code (gebruik dus wildcards!).
Controleer de status van het project.
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.
Ga naar GitProject2 en controleer de status.
Open het README.md bestand. Type daarvoor de naam van het bestand (let wel op de hoofdletters)!
Voeg aan dat bestand onderaan een regel tekst toe en sla het bestand op.
Controleer de status.
"Stage" het bestand.
Controleer de status opnieuw.
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.
Wanneer je gebruik maakt van wildcards, moet je wel opletten dat je die niet te ruim neemt. Stel dat voorlopig alle bestanden die met de letter "n" beginnen genegeerd mogen worden. Je zou dan de regel "n*.*" kunnen toevoegen aan .gitignore. Wanneer je later dan bestanden toevoegt aan je project die met de letter "n" beginnen, zullend die ook genegeerd worden.
Ga naar de map GitProject2 en controleer de inhoud en de status.
Voeg de bestanden "n.txt", "negeermij.txt", "negeermij.info", "a.log" en "b.log" toe aan de map met het commando echo
Controleer de status opnieuw.
Voeg het bestand ".gitignore" toe aan de map
Open het bestand ".gitignore" en voeg daar het bestand "n.txt", alle bestanden met als naam "negeermij" en alle bestanden met de extensie ".log" aan toe aan dit bestand.
Controleer de inhoud en de status van de map.
Open ".gitignore" opnieuw, verwijder de regel "n.txt" en sla het bestand op.
Controleer de inhoud en de status van de map.
Er zijn nog heel wat mogelijke patronen Git ignore patronen. Je vind er een heleboel van terug onderaan de Git Cheat Sheet.
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]”
.
Wanneer je geen boodschap meegeeft, zal de commit niet uitgevoerd worden.
Enkel modified bestanden zullen worden toegevoegd aan de nieuwe commit. Wanneer alle bestanden in de staging area unmodified zijn, zal de commit dus ook niet uitgevoerd worden.
Ga naar de map GitProject2 en controleer de inhoud en de status.
Stage alle Untracked bestanden in 1 keer
Bekijk de status
Commit de wijzigingen van je project
Geef onderaan de tekst als boodschap "first commit" mee, sla het bestand op en sluit af.
Controleer de status opnieuw.
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:
git rm [bestandsnaam]
- hiermee verwijder je een specifiek bestand uit de werkmap en Git repository.
git rm -r [directory]
- hiermee verwijder je een directory en de inhoud ervan uit de werkmap en Git repository.
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 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.
Je kan een bestaande commit (snapshot) wijzigen met het commando git commit --amend
. Je kan dit commando op 2 manieren gebruiken
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.
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.
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.
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.
git rm --cached [bestandsnaam]
zal het bestand uit de staging area halen, maar ook alle wijzigingen sinds de laatste commit teniet doen.
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]
.
Voor de volgende oefening maak je gebruik van volgende site:
Voor deze oefeningen kan je bestanden/mappen uiteraard ook aanmaken/aanpassen vanuit de verkenner. Dit hoeft niet (tenzij expliciet opgegeven) vanuit CMD.
Maak een nieuwe map "Pokemon" aan.
Zorg ervoor dat deze map een Git repo wordt.
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.
Zorg ervoor dat het bestand "InfoVoorMezelf.md" genegeerd wordt door Git.
Bekijk de status van het project.
Maak het bestand "Generation1.csv".
Volg alle bestanden (behalve deze die genegeerd moeten worden natuurlijk).
Maak een commit (1) met als mededeling "Generation1 toegevoegd".
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.
Bekijk de status van het project.
Maak een nieuwe commit (2) met als mededeling "Generaties 2-4 toegevoegd".
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.
Bekijk de status van het project.
Maak een commit (3) met als mededeling "Eerste 5 Pokemon Gen1 toegevoegd". (vergeet de tussenstap niet!)
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".
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".
Pas de naam van het bestand "Generatie4.csv" aan door "Generation4.csv" en maak een nieuw commit (5) met als tekst "Generatie4 -> Generation4"