====== Git werkwijze en discpline ======
Git is een repository voor code die wijzigingen en versies bijhoudt, ontwikkeld door Linus Torvalds, die ook Linux begonnen is.
De onderdelen zijn de gitserver, dat is je remote, ook wel origin, de git software die lokaal draait op de plek waar je de bewerkingen doet. wijzigingen die je doet doe je lokaal.
de maniere waarop je wijzigingen doorvoert in de gitserver staat hieronder beshreven.
===== voorbereiding =====
Het is handig om voor de lokale repositories, op de werkplek waar je gaat bewerken (Laptop of steppingstone/ansible server), een directory aan te maken om het overzichtelijk te houden, er zijn namelijk nogal wat repositories.\\
Zelf kies ik meestal voor een directory ''~/gitrepos/'' met daarin weer een directory per omgeving b.v.''~/gitrepos/nationaalarchief/''. en vervolgens ''cd ~/gitrepos/nationaalarchief/''.
instaleer git.
Stel je persoonlijke gegevens in:\\
''%%git config --global user.name "Your Name"%%''\\
''%%git config --global user.email "your_email@whatever.com"%%''
===== cloning =====
===== Branching =====
==== Branch purpose ====
De branch **main** (in oudere repositories ook wel **master**) wordt gebruikt voor productie. Hierin bevindt zich dus __alleen productie waardige code__.
edit nooit in de main/master branch
Voor werk aan de code maak je altijd een nieuwe branch aan vanuit **main**.
==== Branch nameing ====
De naamgeving van de branch waarin je werkt is vrij in te vullen, maar het is handig om hier een topdesk ticketnummer of een Jira userstory nummer in te verwerken zodat het eenvoudiger is om de reden van veranderingen terug te vinden.
zorg dat je branch niet te lang blijft bestaan (liefst alleen op de dag dat je er aan werkt), zo zitten wijzigingen van verschillende mensen elkaar het minst in de weg.
==== Branch aanmaken ====
Hoe maak je in een bash shell (of een VSCode terminal) een nieuwe branch aan:
* clone de repository van het gitlab project waar je aan gaat werken, b.v.:\\ ''git clone git@git.nationaalarchief.net:tb/openshift/minio-manager/surf-s3-resources.git''
* zorg dat je in de **main** branch bent:\\ ''git checkout main''
* zorg dat je de laatste versie lokaal hebt:\\ ''git pull origin main''
* maak lokaal een nieuwe branch vanuit deze **main** branch (als voorbeeld hier een Jira ticket TEAMINFRA-11):\\ ''git checkout -b TEAMINFRA-11 rclone test buckets''
* doe je wijzigingen.
* voeg eventueel nieuwe en gewijzigde files toe door:\\ ''git add .''
* commit de wijzigingen in alle files:\\ ''git commit -am "commentaar over wijziging"''
* Doe je een push naar de GitLab server van jou branch:\\ ''git push origin TEAMINFRA-11_rclone_test_buckets''
Nu is je werk opgeslagen in je eigen remote branch (dwz op de git server)
===== Mergeing =====
Als je alle wijzigingen hebt doorgevoerd is het tijd om je eigen branch te mergen naar **main**.
Dit doe je op de GitLab server.
Aan de repository is vaak een script toegevoegd dat een Pipeline start waarin een runner een aantal handelingen uitvoerd op productie.
==== Merge request ====
Nadat je in de vorige stap succesvol je lokale branch naat gitlab hebt gepushed zie je in de output een link b.v.:
remote: To create a merge request for rclone-infra-acpt-2eronde, visit:
remote: https://git.nationaalarchief.net/tb/openshift/minio-manager/surf-s3-resources/-/merge_requests/new?merge_request%5Bsource_branch%5D=rclone-infra-acpt-2eronde
als je die link opent en inlogt
-----------------------------------------------------------------
{{ :werkinstructies:git:git-discipline-1.png?900|}}
druk op **Create merge request** en druk vervolgens op **change branches** om de Target branch naar **sios** te veranderen aangezien GitLab automatisch daar de **main** branch invult.
{{ :werkinstructies:git:git-discipline-2.png?900|}}
als je nog niet helemaal klaar bent maar alleen een onderdeel van je wijzigingen wilt testen in samenhang met de wijzigingen van anderen kan je eventueel het vinkje **Delete source branch** uitzetten, normaal gesproken wordt je change branch opgeruimd.
Vervolgens druk druk je op **Assign** om de merge request toe te kennen aan een collega die de merge uitvoert.
{{:werkinstructies:git:git-discipline-3.png?300|}}
===== Merge naar develop of sios branch =====
Als collega krijg je een merge request op je naam van andere collegae om het vier ogen principe te hanteren.
Als er geen merge conflicten zijn check je de wijzigingen op rare dingen en mogelijke verstoringen druk hiervoor op de knop **Open in Web IDE**, hier krijg je ge-highlight de wijzigingen te zien.
(plaatje hier)
Als je geen rare dingen bent tegen gekomen druk je op **Merge** en geef je aan degene die de wijziging heeft gedaan door dat hij kan gaan testen met de **sios** branch.
===== Merge naar main =====
Wanneer de tests met develop succesvol zijn is het tijd om een merge request te doen voor develop of sios naar main.
in de rechter zijbalk druk je op **Merge requests**, in het scherm wat verschijnt druk linksboven op de blauwe knop **New merge request**
in het volgende venster selecteer **sios** in het pulldown menu **Select source branch** Target branch staat meestal al op **main** druk op **Compare branches and continue**
vervolgens assign je de merge request weer aan een andere collega wederom ter controle en om er voor te zorgen dat er als team gewerkt wordt en niet als een "Remy" allerlei wijzigingen door te voeren waar het team later door verrast wordt.