# Git Workflow
## Übersicht
Der Git Workflow beschreibt, wie Source Code mittels Git und GitLab verwaltet wird.
Unser Projekt folgt dabei in groben Zügen dem Ansatz des [Git-flow-Workflow](https://www.atlassian.com/de/git/tutorials/comparing-workflows/gitflow-workflow).

## Branches
Die Gliederung des Codes erfolgt sowohl lokal als auch in GitLab mittels _Branches_.
Wir unterscheiden zwischen 3 Typen:
- `master`
Der `master`-Branch beinhaltet stets den Code, welcher in den Management-Reviews begutachtet wird.
Sowohl Frontend- als auch Backend müssen in diesem Branch stets lauffähig sein. Dies wird mit _Continuous Integration (CI)_ mittels `.gitlab-ci.yml` sichergestellt.
- `dev`
Der `dev`-Branch ist Kind von `master` und stellt immer den aktuellen lauffähigen Stand der Entwicklung dar (CI überprüft auf Tests).
Ausgehend von `dev` arbeiten die Teammitglieder in den `feature`-Branches an vollständigen, in sich geschlossenen Features der Applikation.
Um diesen Branch in `master` zu mergen, muss ein **Pull-Request (PR)** in GitLab durchgeführt werden. Teammitglieder können dort den Code reviewen und Kommentare und Anmerkungen hinzufügen.
- `feature`
Jedes Teammitglied arbeitet selbständig an den ihnen zugeteilten Features mittels eines `feature-branch`. Diese Branches sind von den Mitgliedern selbst ausgehend von `dev` zu erstellen.
Wenn das Feature vollständig implementiert wurde, so wird ein Pull-Request an den `dev`-Branch gerichtet und von Teammitgliedern reviewed. Wird der PR akzeptiert, so kann der zugehörige Feature-Branch gelöscht werden.
Im Feature-Branch findet keine CI statt.
Der Name eines Feature-Branch folgt der Konvention:
> `feature/<feature_nr>_<feature_name>`
Dabei kann das Schema aus der Issues-Sektion übernommen werden.
## Git Commits
Auch für einzelne Commits gibt es eine Namenskonvention:
> `[<exact_feature_nr>] <English_sentence>`
Ein guter Commit sieht dann beispielsweise so aus:
> `[6.1] Add barcharts to donation overview`
Hinweise für gute Commit-Messages werden im Abschnitt [Ressourcen](#Ressourcen) verlinkt.
## Ressourcen
[Offizielles Git Tutorial](https://git-scm.com/book/en/v2)
[Video zum Arbeiten mit Git](https://www.youtube.com/watch?v=3a2x1iJFJWc)
[Umfassende Videozusammenfassung](https://www.youtube.com/watch?v=HkdAHXoRtos&list=WL&index=32)
[Git-flow-Worklow Erklärung](https://www.atlassian.com/de/git/tutorials/comparing-workflows/gitflow-workflow)
[Feature branch workflow](https://docs.gitlab.com/ee/gitlab-basics/feature_branch_workflow.html)
[How to write a git commit messages](https://chris.beams.io/posts/git-commit/)
[Commit Message Guidelines](https://gist.github.com/robertpainsi/b632364184e70900af4ab688decf6f53)