# 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). ![workflow](https://i.imgur.com/BCUZKPR.png) ## 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)