# GitLab – was ist das und wie arbeitet man damit über Git: clone, push, Merge Request, CI/CD

URL: https://skillaria.top/de/guides/git/was-ist-gitlab-git

GitLab ist eine Webplattform zum Speichern von Git-Repositorys und für die Zusammenarbeit im Team: Code, Merge Requests, Aufgaben und integriertes CI/CD an einem Ort. Sie können GitLab in der Cloud auf gitlab.com oder auf einem eigenen Server der Firma nutzen, und der Code wird mit den gewohnten Git-Befehlen clone, push und pull übertragen.

## Was ist GitLab

GitLab ist eine Plattform, auf der Git-Repositorys liegen und um die herum die Teamarbeit organisiert wird: Code-Ansicht, Merge Requests (Zusammenführungsanfragen), Aufgaben, Wiki, Container-Registry und integriertes CI/CD. Kurz gesagt: GitLab ist „GitHub mit eigener Build-Pipeline und der Möglichkeit, alles auf dem eigenen Server zu betreiben“. Viele Unternehmen, auch in Deutschland, bewahren ihren Code in einem GitLab im internen Netzwerk auf.

Das Projekt begann 2011 als Open-Source-Anwendung zum Hosting von Code; daraus entstand das Unternehmen GitLab Inc. Die Plattform gibt es in zwei Varianten: die Community Edition, eine offene Version, die Sie kostenlos auf Ihrem Server installieren können, und die Enterprise Edition mit kostenpflichtigen Funktionen. Auf dem Cloud-Dienst gitlab.com heißen die Tarife Free, Premium und Ultimate.

Wichtig ist, die Begriffe nicht zu verwechseln. Git ist ein Versionskontrollsystem, also ein Programm auf Ihrem Computer. GitLab ist ein Dienst, der eine entfernte Kopie des Repositorys verwahrt und dem Team Oberfläche und Werkzeuge dazu bietet. Ohne Git kommt man bei GitLab nicht weiter, Git funktioniert dagegen auch ohne GitLab bestens.

## Git und GitLab: der Unterschied

Die Frage „git und gitlab was ist das“ stellt man meist, wenn beide Begriffe in einer Stellenanzeige oder am ersten Arbeitstag auftauchen. Der Unterschied entspricht dem zwischen einem Dokument und einem Cloud-Speicher: Git verfolgt die Änderungen an Dateien und führt die Commit-Historie und die Branches lokal. GitLab nimmt diese Historie über das Netz entgegen und zeigt sie im Browser an.

|  | Git | GitLab |
| --- | --- | --- |

| Was es ist | Programm zur Versionskontrolle | Webplattform für Repositorys und Teamarbeit |

| Wo es läuft | Auf dem Rechner des Entwicklers | Auf gitlab.com oder auf dem Server der Firma |

| Internet nötig | Nein, außer bei push, pull, fetch, clone | Ja, es ist ein Netzwerkdienst |

| Kernfunktionen | Commits, Branches, Zusammenführungen, Historie | Merge Requests, Review, Aufgaben, CI/CD, Zugriffsrechte |

| Bedienung | Kommandozeile, IDE, grafische Clients | Browser plus die gewohnten Git-Befehle |

Alle Arbeiten am Code – commit, branch, merge – erledigen Sie weiterhin in Git. GitLab empfängt das Ergebnis über `git push` und ermöglicht es, es mit Kollegen zu besprechen.

## GitLab und GitHub: die Unterschiede

Beide Dienste speichern Git-Repositorys und unterstützen das Code-Review, deshalb lassen sich die Grundkenntnisse eins zu eins übertragen. Die Unterschiede liegen in den Schwerpunkten und im Bereitstellungsmodell.

| Kriterium | GitLab | GitHub |
| --- | --- | --- |

| Zusammenführungsanfrage | Merge Request (MR) | Pull Request (PR) |

| CI/CD | Integriertes GitLab CI/CD, Datei `.gitlab-ci.yml` | GitHub Actions, Dateien in `.github/workflows/` |

| Eigene Installation | Kostenlose Community Edition auf dem eigenen Server | GitHub Enterprise Server, kostenpflichtig |

| Quellcode der Plattform | Offen (Community Edition) | Geschlossen |

| Gruppierung von Projekten | Gruppen und verschachtelte Untergruppen | Organisationen |

| Wo er verbreiteter ist | Unternehmensentwicklung, interne Server | Open Source, öffentliche Projekte, Portfolios |

In der Praxis nutzen Entwickler oft beide: Persönliche Projekte und das Portfolio liegen auf GitHub, der Arbeitscode im Unternehmens-GitLab. Die Git-Befehle sind dabei dieselben, nur die Adresse des Remote-Repositorys ändert sich.

## gitlab.com oder eigener Server (self-hosted)

Der Cloud-Dienst gitlab.com eignet sich für persönliche Projekte und kleine Teams: Sie registrieren sich und legen sofort Repositorys an. Updates, Backups und Verfügbarkeit übernimmt GitLab. Die Grenzen des kostenlosen Tarifs (Zahl der Mitglieder, CI-Minuten, Speicherplatz) ändern sich von Zeit zu Zeit; die aktuellen Bedingungen finden Sie auf der Tarifseite.

Self-hosted GitLab installiert das Unternehmen auf dem eigenen Server – aus einem Linux-Paket, mit Docker oder mit Kubernetes. Der Code verlässt das interne Netzwerk nicht, Sie können die Unternehmensanmeldung über LDAP anbinden und eigene Runner für Builds einrichten. Dafür kümmern sich die Administratoren selbst um Updates und Backups. Für Entwickler ist der Unterschied kaum spürbar: Die Adresse lautet dann nicht `gitlab.com`, sondern etwa `gitlab.firma.de`.

## Git für die Arbeit mit GitLab einrichten

Richten Sie vor dem ersten Commit Name und E-Mail ein – sie landen in der Historie, und GitLab ordnet die Commits anhand der E-Mail Ihrem Profil zu:

```
git config --global user.name "Max Mustermann"
git config --global user.email "max@example.com"
```

Unter Windows arbeitet man bequem in Git Bash: Er wird zusammen mit Git für Windows installiert und enthält `ssh-keygen`, sodass alle Befehle aus diesem Artikel dort ohne Änderung funktionieren. Anschließend wählen Sie die Anmeldung: HTTPS mit Token oder SSH-Schlüssel.

### Anmeldung per HTTPS: Personal Access Token

Das Kontopasswort sollten Sie für Git-Vorgänge über HTTPS nicht verwenden; bei aktivierter Zwei-Faktor-Authentifizierung funktioniert es ohnehin nicht. Erstellen Sie stattdessen in den Profileinstellungen von GitLab einen Personal Access Token (Bereich Access tokens). Für die Arbeit mit Code genügen die Rechte `read_repository` und `write_repository`; legen Sie eine Laufzeit fest und speichern Sie den Token sofort – er wird nicht noch einmal angezeigt.

Beim ersten Push oder Clone fragt Git nach Benutzername und Passwort: Geben Sie Ihren GitLab-Benutzernamen ein und statt des Passworts den Token. Der Credential Manager (in Git für Windows eingebaut) speichert ihn, sodass Sie ihn nicht erneut eingeben müssen.

### Anmeldung per SSH-Schlüssel

SSH ist für den täglichen Gebrauch bequemer: Einmal den Schlüssel hinterlegt, und Sie geben nichts mehr ein.

```
ssh-keygen -t ed25519 -C "max@example.com"
cat ~/.ssh/id_ed25519.pub
```

Den Inhalt der Datei `.pub` (öffentlicher Schlüssel) fügen Sie in den Profileinstellungen von GitLab im Bereich SSH Keys ein. Verbindung prüfen:

```
ssh -T git@gitlab.com
Welcome to GitLab, @max.mustermann!
```

## Git clone GitLab: Repository klonen

Auf der Projektseite finden Sie die Schaltfläche Code mit zwei Adressen – für SSH und für HTTPS. Kopieren Sie die gewünschte und führen Sie `git clone` aus:

```
# per HTTPS
git clone https://gitlab.com/my-group/my-project.git

# per SSH
git clone git@gitlab.com:my-group/my-project.git
```

In GitLab kann der Projektpfad Untergruppen enthalten, zum Beispiel `gitlab.com/firma/backend/api.git` – das ist normal, kopieren Sie die Adresse vollständig.

### Git clone GitLab mit Token

In Skripten und auf Servern, wo niemand ein Passwort eingeben kann, übergibt man den Token direkt in der Adresse. Als Benutzername dient Ihr GitLab-Name oder das technische `oauth2`:

```
git clone https://oauth2:IHR_TOKEN@gitlab.com/my-group/my-project.git
```

Beachten Sie: Eine solche Adresse wird in `.git/config` gespeichert und kann in der Befehlshistorie der Shell landen. Für Automatisierung eignen sich besser ein Deploy-Token oder ein Projekt-Access-Token mit minimalen Rechten und begrenzter Laufzeit; in der CI verwenden Sie die eingebaute Variable `CI_JOB_TOKEN`.

## Git Push in GitLab: Code hochladen

Existiert das Projekt bereits lokal, legen Sie in GitLab ein leeres Projekt an (ohne README, damit kein zusätzlicher Commit entsteht) und verknüpfen das Remote-Repository:

```
git remote add origin git@gitlab.com:my-group/my-project.git
git branch -M main
git push -u origin main
```

Die Option `-u` verknüpft den lokalen Branch mit dem entfernten; danach genügen `git push` und `git pull`. Der übliche Arbeitszyklus unterscheidet sich in nichts von jedem anderen Dienst:

```
git switch -c feature/login
git add .
git commit -m "Anmeldeformular hinzufügen"
git push -u origin feature/login
git pull
```

Tags senden Sie separat: `git push origin v1.2.0` oder alle auf einmal mit `git push --tags`. In GitLab sind Tags im Bereich Tags sichtbar und lösen häufig die Pipeline für die Freigabe eines Releases aus.

### Typische Fehler bei git push in GitLab

- **HTTP Basic: Access denied** – falscher Benutzername oder statt des Tokens wurde das Passwort eingegeben. Erstellen Sie einen Token mit dem Recht `write_repository` und löschen Sie den alten Eintrag im Credential Manager.
- **Permission denied (publickey)** – GitLab kennt Ihren SSH-Schlüssel nicht. Prüfen Sie, ob der öffentliche Schlüssel im Profil hinterlegt ist, und führen Sie `ssh -T git@gitlab.com` aus.
- **You are not allowed to push code to protected branches** – der Branch (meist `main`) ist geschützt. Senden Sie die Änderungen in Ihren eigenen Branch und öffnen Sie einen Merge Request.
- **rejected ... (fetch first)** – auf dem Server gibt es Commits, die Sie nicht haben. Führen Sie `git pull --rebase` aus und wiederholen Sie den Push.
- **remote: Project not found** – Tippfehler in der Adresse oder kein Zugriff auf das Projekt; klären Sie Ihre Rolle mit dem Eigentümer.

## Merge Request in GitLab

Der Merge Request ist das Gegenstück zum Pull Request auf GitHub: die Bitte, Ihren Branch in den Hauptbranch zu übernehmen. Im MR hinterlassen Kollegen Kommentare zu einzelnen Codezeilen, laufen die CI-Prüfungen und fällt die Entscheidung über das Zusammenführen. Nach dem Push eines neuen Branches zeigt GitLab im Terminal einen Link zur Erstellung des MR, und in der Weboberfläche erscheint das Angebot, ihn anzulegen.

Einen MR können Sie auch direkt in der Kommandozeile mit Push-Optionen erstellen:

```
git push -o merge_request.create -o merge_request.target=main origin feature/login
```

Ein typischer Ablauf: Branch für die Aufgabe → Commits → Push → MR → Review und grüne Pipeline → Merge. Beim Zusammenführen kann GitLab die Commits zu einem zusammenfassen (Squash) und den Quell-Branch löschen. Entsteht im MR ein Konflikt, aktualisieren Sie den Branch am einfachsten lokal – mit `git pull --rebase origin main` oder `git merge main`, dann die Konflikte lösen und erneut pushen.

Kennzeichnen Sie unfertige Arbeit als Draft: Ein solcher MR lässt sich nicht versehentlich zusammenführen, die Kollegen sehen die Änderungen aber bereits und können sie besprechen.

## CI/CD in GitLab: .gitlab-ci.yml

Die große Besonderheit von GitLab ist das integrierte CI/CD. Legen Sie im Stammverzeichnis des Repositorys die Datei `.gitlab-ci.yml` ab – bei jedem Push startet GitLab dann eine Pipeline aus Phasen (stages) und Jobs. Die Jobs führen Runner aus: Auf gitlab.com gibt es gemeinsame Runner, auf dem eigenen Server richtet man sie separat ein.

```
stages:
  - test
  - deploy

test:
  stage: test
  image: python:3.12
  script:
    - pip install -r requirements.txt
    - pytest

deploy:
  stage: deploy
  script:
    - ./deploy.sh
  rules:
    - if: $CI_COMMIT_TAG
```

Hier laufen die Tests bei jedem Push, der Job `deploy` dagegen nur, wenn ein Tag gesendet wird: `git tag v1.0.0` und `git push origin v1.0.0`. Die Ergebnisse der Pipeline sehen Sie direkt im Merge Request, und Sie können das Zusammenführen blockieren, solange die Prüfungen nicht bestanden sind.

## Wie Sie ein Repository in GitLab löschen

Git-Befehle können ein Projekt auf dem Server nicht löschen – `git push` ändert nur Branches und Tags. Gelöscht wird das Projekt in der Weboberfläche: Projekteinstellungen, Bereich General, Block Advanced, Schaltfläche zum Löschen mit Bestätigung durch Eingabe des Namens. Dafür brauchen Sie die Rolle Owner. Die lokale Kopie bleibt dabei erhalten – es ist einfach ein Ordner mit `.git`.

Wollen Sie das lokale Repository von GitLab trennen, ohne auf dem Server etwas zu löschen, genügt `git remote remove origin`.

## Wann man sich für GitLab entscheidet

- Der Code darf nicht in eine externe Cloud – ein eigener Server ist erforderlich.
- Sie brauchen CI/CD sofort und ohne Drittdienste.
- Eine große Organisation mit Teamhierarchie – nützlich sind verschachtelte Gruppen und flexible Rollen.
- Sie treten in ein Unternehmen ein, das bereits GitLab nutzt: Dann haben Sie keine Wahl, Ihre Git-Kenntnisse übertragen sich aber vollständig.

Für ein Portfolio und Open Source wählt man häufiger GitHub: Dort ist die Community größer und die Sichtbarkeit der Projekte höher. Nichts hindert Sie daran, ein Projekt auf beiden Diensten zu führen – ein Repository kann mehrere Remotes haben.

## Fazit

GitLab ist eine Plattform für Git-Repositorys mit Review über Merge Requests, Aufgaben und integriertem CI/CD, verfügbar in der Cloud und auf dem eigenen Server. Die Arbeit damit besteht aus vertrauten Befehlen: Richten Sie die Anmeldung per Token oder SSH-Schlüssel ein, danach folgen clone, commit, push und Merge Request. Remote-Repositorys und Team-Workflows werden im Git-Kurs praktisch durchgearbeitet.

## FAQ

**Ist GitLab kostenlos?**

Die Community Edition zur Installation auf dem eigenen Server ist kostenlos, auf gitlab.com gibt es den kostenlosen Tarif Free mit Einschränkungen; erweiterte Funktionen stehen in den kostenpflichtigen Tarifen Premium und Ultimate zur Verfügung.

**Kann man ein Projekt von GitHub zu GitLab übertragen?**

Ja, GitLab bietet den Import von GitHub-Projekten an. Die Historie lässt sich auch manuell übertragen: git clone --mirror von der alten Adresse und git push --mirror an die neue.

**Muss man eigene Befehle für GitLab lernen?**

Nein, mit dem Code arbeiten Sie mit den normalen Git-Befehlen; GitLab ergänzt die Weboberfläche, und für die Automatisierung gibt es das Kommandozeilenprogramm glab sowie die API.

**Worin unterscheidet sich GitLab Flow von Git Flow?**

GitLab Flow ist einfacher: Die Arbeit läuft in Feature-Branches mit Merge Requests in main; für Umgebungen und Releases kann man bei Bedarf eigene Branches hinzufügen, ohne die Branches develop und hotfix aus Git Flow.


---
Source: Skillaria.Top (https://skillaria.top)
