## Kollaborative Anwendungsentwicklung mit GitLab
---
![In case of fire](https://hikaruzone.files.wordpress.com/2015/10/in-case-of-fire-1-git-commit-2-git-push-3-leave-building2.png?w=800&h=559)
---
## Agenda
- Einführung in das Konzept von Git[Lab|Hub]
- GitLab in der Produktion digitaler Artefakte
- GitLab im Projektmanagement
---
## Das "Git" in GitLab
- Verteiltes Versionskontrollsystem [Git](https://git-scm.com/)
- 2005 von [Linus Torvalds](https://de.wikipedia.org/wiki/Linus_Torvalds) entwickelt
- Hauptzweck: "Tracking" textbasierter Dateien
- Git lernen: [Try Git!](https://try.github.io/)
---
## GitHub
- "Umschlagplatz" für Code, Texte und Daten
- Code: https://github.com/collections/open-source-organizations
- Daten: https://github.com/collections/open-data
- Science: https://github.com/showcases/science
- Texte: https://bundestag.github.io/gesetze/
---
## GitLab
- Verteilte Versionskontrolle von [GitLab Inc.](https://about.gitlab.com/about/) zum [Selberhosten](https://about.gitlab.com/installation/)
- ermöglicht Workflow von der Idee zum fertigen Produkt
---
## Produktion
---
## GitLab als universelles CMS
* Wir verstehen GitLab als **universelles Backend** zur Entwicklung und Organisation von digitalen Inhalten.
* Die Arbeit mit GitLab führt daher zum Erwerb von **Kompetenzen mit großer Reichweite** in Entwicklung, Forschung, Lehre und Verwaltung.
---
## GitLab
- Projekte
- Benutzer_innen
- Gruppen
---
## Registrieren und Anmelden
- Account anlegen:
https://gitlab.com/users/sign_up
- Empfehlung:
Sprache der Oberfläche *nicht* umstellen, da viele Dokumentationen auf englisch
---
## Profil und Einstellungen
- **Profile:** Avatar, Bio und verbundene Accounts
- **Account:** Änderung des Benutzernamens
- **Emails:** Zusätzliche Emails
- **Notifications:** Einstellen der Dichte von Meldungen
- **Preferences:** Aussehen der Oberfläche
---
## Projekt anlegen
- individuelle Projekte aus dem professionellen Kontext (Daten, Code, Text)
- **Achtung!**
*Visibility Level* entscheidet über Sichtbarkeit nach außen
---
## Projekteinstellungen
### General
- **Permissions:**
*Welche* Bereiche des Projekts werden genutzt?
*Wer* darf die Bereiche nutzen?
- **Advanced:** umbenennen, übertragen, löschen
----
### Members
- Hinzufügen von Beitragenden
*Settings - Members - Invite Members/Groups:* eintragen und ...
- Zuweisung von Rollen
---
## Exkurs: [Markdown](https://de.wikipedia.org/wiki/Markdown)
https://dillinger.io/
- einfache Auszeichnungssprache für Texte
- kann mit HTML und LaTeX angereichert werden
- weit verbreitet im Netz
- kann mit [Pandoc](http://pandoc.org/) in zahlreiche Zielformate gewandelt werden
---
## Weiter: Arbeiten im Projekt
- Hinzufügen einer README.md
- Beschreibung des Projekts
- Beispiele guter READMEs in namhaften Projekten bei GitHub
---
## Projektmanagement
---
## Gruppen
- Mit Gruppen in GitLab können Teams gebildet werden
- Gruppen können Untergruppen (*subgroups*) haben
- Projekte können in/für Gruppen angelegt werden
---
## Erste Schritte Projektmanagement
- Projektdefinition
- Projektplanung
- Strukturierung des Projekts
- Sammlung und Darstellung von Aufgaben/Arbeitspaketen
- Aufgabenverteilung
---
## Das Wiki
- Jedes Projekt hat ein **Wiki**
- Inhalte im Wiki werden mit [Markdown](https://de.wikipedia.org/wiki/Markdown) notiert
- Das Wiki ist ebenfalls ein Git-Repository und bietet alle Vorteile der dezentralen Bearbeitung
- Wikis eignen sich sehr gut zur
- Informationssammlung
- Projektdokumentation
- Hacks zur (fast) finalen Dokumentenerstellung
---
## Issues
- Festhalten von Arbeitsaufträgen, User Storys, Fehlerberichten, Kundenwünschen etc.
- Diskussion über die Details
- Entsprechend der Idee von *User Storys* können mit Checkboxen *Tasks* definiert werden. Diese beschreiben die konkreten Aufgaben, die zum Einlösen der Story erledigt werden müssen.
---
## Label
- Label sind frei definierbare "Etiketten" für Issues und ermöglichen übergreifende Ordnungskonzepte
- Aus Labeln können Listen im Board erstellt werden
---
## Das Board
- Jedes Projekt hat ein Board
- sinnvolle Strukturierung von Issues z.B. gemäß einer Projektmanagementmethode (Kanban, Scrum o.ä.)
---
## Zuweisung von Issues
- Issues können entsprechend der Aushandlung zwischen den Beitragenden zugewiesen werden
- Issues können an einen *Milestone* oder eine individuelle Deadline gebunden werden
- Issues können gelabelt werden
---
## Branches
- Branches sind eigenständige Entwicklungslinien
- Ergebnisse aus Branches können in andere Branches **gemergt** werden
- Es ist sinnvoll, **Branches aus Issues** zu erstellen
- Branches sollten nach dem Mergen gelöscht werden
---
## Branches
**Branches kosten nichts und können nach Herzenslust jederzeit auch zum Experimentieren und Spielen erstellt werden**
---
## Merge Requests
- **Merge Requests (MR)** sind zu verstehen als
*Antrag auf Übernahme von Beiträge aus einem Quellbranch in einen Zielbranch*
- MRs können
1. innerhalb eines Projekts von einem Branch zu einem anderen gestellt werden.
1. von einem geforkten Projekt (Kopie) auf das Quellprojekt (Original) gestellt werden.
---
## Merge Requests
- MRs haben großes Potential für die Qualitätskontrolle durch die Entwicklergemeinschaft
---
## Merge
- **mergen** bezeichnet den Vorgang, einen *Commit* mit einem anderen zu verschmelzen
---
## Forks
Als **Fork** wird die Kopie eines Repositorys bezeichnet.
---
## Review Apps
GitLab bietet die Möglichkeit, auf Basis von Branches so genannten **Review Apps** zu generieren. Hierbei kommen Virtualisierungstechniken wie [Docker](https://de.wikipedia.org/wiki/Docker_(Software)) zum Einsatz.
**Review Apps** sind (vollständige) Anwendungen/Artefakte auf Basis von Branches. Sie dienen dazu, dem Kunden bzw. dem Team eine Vorschau auf die Implementierung einer Funktion oder Anforderung zu geben.
---
## GitKraken
- [grafischer Client](https://www.gitkraken.com/) zur lokalen Verwaltung von Dateien
- Anbindung an entfernte Git-Dienste wie GitHub, GitLab, Bitbucket u.a.
---
## Grundbegriffe
| | |
|---------------|------------------------------------------|
| Projekt | Organisationsheinheit |
| Repository | Ort für Dateien |
| Issue | Thema |
| Commit | Speicherung |
| Branch | Paralleler Entwicklungszweig |
| Merge Request | Antrag auf Zusammenführung von Beiträgen |
| Merge | Zusammenführung |
---
## Nutzungsbedingungen
<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons Lizenzvertrag" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br />Diese Präsentation von Axel Dürkop (ITBH an der TUHH) ist lizenziert unter einer <a rel="license" href="https://creativecommons.org/licenses/by/4.0/deed.de">Creative Commons Namensnennung 4.0 International Lizenz</a>.
Nutzen Sie diese Präsentation gern im Rahmen der genannten Lizenz, um auch anderen die Vorzüge von GitLab näher zu bringen.
{"metaMigratedAt":"2023-06-15T04:52:26.581Z","metaMigratedFrom":"YAML","title":"Einführung in GitLab","breaks":"true","slideOptions":"{\"center\":true,\"progress\":true,\"slideNumber\":true,\"transition\":\"fade\"}","contributors":"[{\"id\":\"f63b0a65-2bd4-47a3-9d93-e37a4f7bee6f\",\"add\":10463,\"del\":3047}]"}