[Hier gehts zum WIKI](https://git-ce.rwth-aachen.de/assistance-systems/helloworld/-/wikis/home)
# Bitte das WIKI zu diesem Repository lesen
Dieser Wiki Artikel soll dir den allgemeinen Umgang mit git als Dateiablage mit Versionsverwaltung vermitteln. Zum Einstieg empfiehlt es sich die die Kapitel nacheinander und mit eigenem Rechner auszuprobieren.
[[_TOC_]]
# **Rollen in einem Git-Repository**
<details>
<summary>Die 5 Rollen in einem Respository</summary>
***Owner** - Besitzer der Repository. Er besitzt alle Rechte und hat keine Einschränkungen in der Verwaltung eines Repositories.
***Maintainer** - Pflegt die Repository und kann die Rollenverteilung der Mitglieder verwalten.
***Developer** - Kann Programmcode in das Repository hinzufügen (Push).
***Reporter** - Kann das Repository durchforsten und vorhandene Issues an die Developer verteilen.
***Guest** - Hat die wenigsten rechte. Als Gast kann man lediglich sich das Repository anschauen und klonen
Eine genauere Auflistung aller Rechte ist unter folgendem Link zu finden:
***Repository** - Ist ein verwaltetes Verzeichnis zur Speicherung und Beschreibung digitaler Objekte für ein digitales Archiv (Projekt).
***Branch** - Entwicklungszweig eines Projektes, wichtig für die gleichzeitige Entwicklung eines Projektes. Wird ein Branch zum Hauptzweig des Repositories zurück geführt so wird dies als Merge bezeichnet.
***Index** - Auflistung der aktuell bereitgestellten veränderten Dateien.
***Snapshot** - Abbild der aktuell bereitgestellten Änderungen
**Git-Befehle**
***Clone** - Legt eine lokale kopie eines existierenden Git-Repository an.
***Pull** - Wird verwendet, um Inhalte aus einem Remote-Repository herunterzuladen und das lokale Repository zu aktualisieren.
***Add** - Fügt die veränderten Dateien zum sogenannten Index hinzu.
***Commit** - Erfasst einen Snapshot (Abbild) der aktuell bereitgestellten Änderungen, die Dateien im Index, des Projekts.
***Push** - Lädt Inhalte aus dem Snapshot in ein Remote-Repository hoch.
Im _Password_ Tab ein Passwort eingeben **(1)** (einfachheitshalber das Passwort für die CampusID eingeben) und _Save Password_ klicken **(2)**. Nach erfolgtem Passwort wechsel wird man ausgeloggt und muss sich mit dem neuen Passwort einloggen.
In Gitlab _Personal Profile_ (oben rechts) findet man den eigenen Benutzernamen. Der Benutzername wird später benötigt und sollte nicht geändert werden.
<summary>Kopieren der Repository-Adresse</summary>
Die Repository-Adresse kann auf der Repository Seite eingesehen und in die Zwischenablage kopiert werden. Dafür klickt man auf _Clone_ **(1)** und kopiert den https link **(2)**. Diese lautet in diesem Fall `https://git-ce.rwth-aachen.de/assistance-systems/helloworld.git`
Suche und öffne das Terminal in der Programmübersicht oder die Suchleiste (cmd+Leertaste). Anschließend führe folgenden Befehl aus:
`git`
Es öffnet sich ein Pop-Up-Fenster, welches eine Abfrage nach der Installation der Command Line Developer Tools fragt. Bestätige diese über Installieren.
**Ubuntu:** Um Git auf Ubuntu zu installieren öffnet man das Terminal (STRG+ALT+T) und führt folgende Befehle aus:
`sudo update`
`sudo apt install git`
**Windows:** Um Git auf Windows zu installieren downloadet man die Installationsdatei von `https://gitforwindows.org/` und führt diese aus. Während der Installation sollten alle Voreinstellungen von git beibehalten werden.
## _Vorbereitung (Einmalig nach Installation)_
Für _user.name_ sollte man den zuvor ermittelten Benutzernamen und für _user.email_ die TH-Köln E-Mail Adresse wählen.
Um das Git-Terminal zu starten klickt man mit der rechten Maustaste auf eine freie Stelle in einem Ordner und wählt _Git Bash Here_ aus.
## _Hinzufügen eines SSH Keys (optional)_
Die Authentifizierung beim GitLab Server kann entweder mit Username und Passwort oder mit Hilfe eines SSH Keys durchgeführt werden. Möchte man die Authentifizierung mit einem SSH KEY durchführen, so muss zuerst ein Schlüsselpaar bestehend aus einem privaten und einem öffentlichen Schlüssel erzeugt werden. Im Folgenden wird dafür der Verschlüsselungsalgorithmus EdDSA verwendet. Alternativ kann auch RSA verwendet werden.
**Terminaleingabe (MAC/WINDOWS/LINUX):**
`ssh-keygen -t ed25519 -C "<Kommentar>"`
Anschließend erscheint der folgende Output:
```
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/<user>/.ssh/id_ed25519):
```
Hier kann nun ein Speicherort für die Schlüssel angegeben werden. Durch Drücken der `Enter`-Taste ohne eine Eingabe wird der vorgeschlagene Speicherort verwendet.
Anschließend kommt noch die Frage, ob man ein Passwort (passphrase) für den privaten Schlüssel anlegen möchte.
```
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```
Dies dient dazu, dass der Schlüssel selbst noch einmal mit einem Passwort geschützt ist, sodass der alleinige Besitz der Datei nicht zur Authentifizierung ausreicht. Mit einem Passwort handelt es sich dann um eine 2-Faktor-Authentifizierung.
Anschließend muss der öffentliche Schlüssel bei GitLab hinterlegt werden. Hierzu muss der Inhalt der Datei des öffentlichen Schlüssels kopiert und bei GitLab hinzugefügt werden.
**macOS:**
```tr -d '\n' < ~/.ssh/id_ed25519.pub | pbcopy```
**Linux** (benötigt `xclip` Paket):
```xclip -sel clip < ~/.ssh/id_ed25519.pub```
**Git Bash bei Windows:**
```cat ~/.ssh/id_ed25519.pub | clip```
Nach der Ausführen des entsprechenden Befehls befindet sich der öffentliche Schlüssel in der Zwischenablage.
Nun muss man sich bei GitLab einloggen und oben rechts auf den Avatar klicken. Anschließend klickt man auf **Preferences**. Dann klickt man auf der linken Leiste auf **SSH Keys**. In die **Key** Box kopiert man nun den Inhalt aus der Zwischenablage (`Strg` + `V`) und drückt anschließend auf **Add key**.
</details>
# **Benutzen von Terminalbefehlen**
## Pfadeinstellungen
<details>
<summary>Pfadeinstellungen</summary>
Die folgenden Befehle können nur ausgeführt werden, wenn der angezeigte Pfad im Terminal das Hauptverzeichnis des lokalen Repositories ist. Um im Terminal den Pfad zu wechseln gibt man folgenden Befehl ein, wobei <Pfad> der Zielpfad ist, zu dem man wechseln möchte:
`cd <Pfad>`
Für den Befehl `Clone` ist das ein beliebiger Ordner auf dem PC.
Für die restlichen Befehle ist das anschließend der Ordner mit dem Namen des **remote-repositories**, der beim Klonen erstellt wurde.
**Beispiel:**
So kann das bspw. ein Ordner auf dem Desktop sein, in dem das geklonte Projekt gespeichert wird:
`/Users/<users>/Desktop/Local_repository`
Nach dem Klonen wird dann mit
`cd helloworld`
in den Ordner gewechselt, in dem auch ein untergeordneter **branch** erstellt werden kann.
</details>
## Klonen der Repository (Projekt)
<details>
<summary>Klonen.</summary>
Um ein Projekt zu Klonen, erstellt man ein Neuen Ordner für das Projekt, startet das Git-Terminal und wechselt in den Pfad des eben erstellten Ordners.
[Hier gehts zum WIKI](https://git-ce.rwth-aachen.de/assistance-systems/helloworld/-/wikis/home)
Dann wird folgender Befehl im Terminal eingegeben:
<summary>Installation & Benutzung einer GUI.</summary>
<details>
<summary>Installation von git-cola auf deinem Rechner</summary>
Für die installation der GUI _git-cola_ befolgt man die Anleitung für das jeweilige Betriebssystem auf folgender Seite:
`http://git-cola.github.io/downloads.html`
</details>
<details>
<summary>Klonen des Projekts (Repository)</summary>
Ziel ist das Klonen des Repositories "HelloWorld" auf das eigene System, um lokal auf die Inhalte zugreifen zu können. Mithilfe von git-cola erfolgt dies auf allen Systeme analog. Einzig das SSL-Zertifikat und die Benutzerdaten müssen zuvor **einmalig** hinterlegt werden.
**a)** Starte _git-cola_ und klicke auf _Klonen..._
Die lokal vorhandenen Branches werden unter _Branches_ **(1)** angezeigt, wo der aktuell ausgewählte Branch mit einem Stern gekennzeichnet ist.
Geänderte bzw. hinzugefügte Daten im geklonten Projekt Ordner werden im Hauptfesnter unter Zustand **(2)** angezeigt. Durch Doppeltklick auf die geänderten bzw. hinzugefügten Daten merkt diese für den Upload (Push) vor. Dies wird durch einen grünes Dreieck gekennzeichnet.
Um Daten uploaden (pushen) zu können, muss unter _Commit_ **(3)** einen kommentar eingeben werden (ggf. kann auch eine ausführliche Beschreibung hinzugefügt werden). Anschließend klickt man auf _Commit aufnehmen_. Dabei verschwinden die Daten aus dem Bereich Zustand **(2)**, was aber kein Grund zur sorge ist.
Anschließend klickt man im nächsten Fenster auf _Veröffentlichen_, wenn man noch keinen Branch veröffentlicht hat. Daraufhin erscheint eine Meldung, dass der Branch noch nicht existiert und ob dieser erstellt werden soll, dies bestätigt man mit klick auf _Externen Branch erstellen_.
*[Workflow: lokales Projekt in GitLab anlegen](https://git-ce.rwth-aachen.de/assistance-systems/helloworld/-/wikis/Workflow:-lokales-Projekt-in-GitLab-anlegen)
## Integration der Git Funktionen im Finder (Mac!)
*[Integration der Git Funktionen im Finder (Mac!)](https://git-ce.rwth-aachen.de/assistance-systems/helloworld/-/wikis/Integration-der-Git-Funktionen-im-Finder-(Mac!))
## Readme für Projekt und Abschlussarbeiten
*[Readme für Projekt und Abschlussarbeiten](https://git-ce.rwth-aachen.de/assistance-systems/helloworld/-/wikis/Anlegen-des-Wikis-f%C3%BCr-Projekt-und-Abschlussarbeiten)