Versiebeheer met Git

Git en github

Samenwerken met github

Als je met meerdere mensen aan een project werkt, dan is het de kunst om allemaal met de laatste versie te werken zonder dat je elkaars werk overschrijft. Hiervoor moet je afspraken maken. Je moet natuurlijk niet tegelijkertijd dezelfde bestanden gaan bewerken. Git kan helpen om ervoor te zorgen dat je altijd de laatste versie hebt.

Bestanden synchroniseren

Je kunt een repository opzetten op github.com. Deze repository kun je delen met anderen, zodat je met je team gebruik kunt maken van dezelfde bestanden.

Communicatie met github.com

Er zijn verschillende manieren waarop je kunt communiceren met Github, maar de meest veilige, handige en meestgebruikte manier is op basis van SSH. SSH is een protocol waarbij de authenticatie niet op basis een naam- en wachtwoord combinatie wordt afgehandeld, maar met 2 sleutels. Een publieke en een privé-sleutel. De publieke sleutel is afgeleid van de privé-sleutel. Door de publieke sleutel aan github.com te geven, kun je op basis van je privé-sleutel toegang krijgen tot je repositories op github.com. Om de communicatie op touw te zetten moet je de volgende stappen doen:

Uitleg hoe je ssh-keys maakt en gebruikt lees je hier:

Starten met een lokale repository

Je kunt op 2 manieren je bestanden synchroniseren met github.

Lokale bestanden synchroniseren met github.com

Op je eigen computer navigeer je naar de (project)directory met bestanden. Dit wordt je working-directory genoemd. Als je met een editor werkt en/of een framework gebruikt, dan wil je waarschijnlijk niet alle bestanden opslaan in een repository. Om dit te voorkomen neem je de mappen en bestanden die je niet wil opslaan op in een bestand met de naam .gitignore. Stel je werkt aan een laravel project en je maakt gebruik van Jetbrains' PHPStorm, dan neem je de volgende mappen en bestanden op in .gitignore

# Als je op een mac werkt kom je metadata tegen in de vorm van .DS_Store files.
.DS_Store
# PHPStorm bewaart project-informatie in de map .idea
.idea/
# Laravel gebruikt allerlei externe libraries die worden binnengehaald met composer
vendor/
# Front-ends frameworks zoals Vue en React gebruken npm packages
node_modules/
# wachtwoorden en sleutels heb je liever ook niet op github.com
.env

Bovenstaand is een voorbeeld. De inhoud van een .gitignore-bestand verschilt per project dus je moet zelf goed kijken hoe jouw situatie is. Je kunt op google veel discussies en voorbeelden vinden.

Nadat je een .gitignore bestand hebt toegevoegd aan je working-directory voer je de volgende commando's uit.

git init
git add .
git commit -m "first commit"
git remote add origin git@github.com:jouw-account-naam/je-repository.git 

De naam van je remote repository is 'origin' en je bewaart je werk in de 'master' of 'main'-branch, afhankelijk van je standaard git-instellingen. Gebruik 'git status' om te zien in welke branch je aan het werk bent. Met het volgende commando synchroniseer je de lokale repository met de remote repository op github.com door de je lokale bestanden op github.com te zetten.

git push origin master

Als alles goed is gegaan, zie je nu je bestanden op github.com!

Starten met een repository op github.com

Stel dat je nu je lokale repository op je laptop hebt staan en op github.com, maar je wilt verder werken aan je project op een desktop computer. Je wil dan een kopie van github.com op je desktop computer zetten.

Ga naar github.com en kopieer de (ssh) link van je github-repository. Op je desktop computer ga je naar de directory waar je de repository wilt uitchecken, vervolgens haal je de repository op van github.com....

git clone git@github.com:account-naam/je-repository.git

Workflow

Stel je zit nog achter je desktop computer en je verandert een aantal bestanden.
Voordat je de computer uitzet doe je weer.....

git add .
git commit 'aanpassing aan login-scherm'
git push origin master

Je veranderingen zijn opgeslagen en je bent weer in sync op github.com Als je weer verder wil werken op je laptop, dan start je weer met...

git pull origin master

en je bent weer in sync!