-
1. Erste Schritte
-
2. Git Grundlagen
-
3. Git Branching
- 3.1 Branches auf einen Blick
- 3.2 Einfaches Branching und Merging
- 3.3 Branch-Management
- 3.4 Branching-Workflows
- 3.5 Remote-Branches
- 3.6 Rebasing
- 3.7 Zusammenfassung
-
4. Git auf dem Server
- 4.1 Die Protokolle
- 4.2 Git auf einem Server einrichten
- 4.3 Erstellung eines SSH-Public-Keys
- 4.4 Einrichten des Servers
- 4.5 Git-Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Von Drittanbietern gehostete Optionen
- 4.10 Zusammenfassung
-
5. Verteiltes Git
-
6. GitHub
-
7. Git Tools
- 7.1 Revisions-Auswahl
- 7.2 Interaktives Stagen
- 7.3 Stashen und Bereinigen
- 7.4 Deine Arbeit signieren
- 7.5 Suchen
- 7.6 Den Verlauf umschreiben
- 7.7 Reset entzaubert
- 7.8 Fortgeschrittenes Merging
- 7.9 Rerere
- 7.10 Debuggen mit Git
- 7.11 Submodule
- 7.12 Bundling
- 7.13 Replace (Ersetzen)
- 7.14 Anmeldeinformationen speichern
- 7.15 Zusammenfassung
-
8. Git einrichten
- 8.1 Git Konfiguration
- 8.2 Git-Attribute
- 8.3 Git Hooks
- 8.4 Beispiel für Git-forcierte Regeln
- 8.5 Zusammenfassung
-
9. Git und andere VCS-Systeme
- 9.1 Git als Client
- 9.2 Migration zu Git
- 9.3 Zusammenfassung
-
10. Git Interna
-
A1. Anhang A: Git in anderen Umgebungen
- A1.1 Grafische Schnittstellen
- A1.2 Git in Visual Studio
- A1.3 Git in Visual Studio Code
- A1.4 Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git in Sublime Text
- A1.6 Git in Bash
- A1.7 Git in Zsh
- A1.8 Git in PowerShell
- A1.9 Zusammenfassung
-
A2. Anhang B: Git in deine Anwendungen einbetten
- A2.1 Die Git-Kommandozeile
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Anhang C: Git Kommandos
- A3.1 Setup und Konfiguration
- A3.2 Projekte importieren und erstellen
- A3.3 Einfache Snapshot-Funktionen
- A3.4 Branching und Merging
- A3.5 Projekte gemeinsam nutzen und aktualisieren
- A3.6 Kontrollieren und Vergleichen
- A3.7 Debugging
- A3.8 Patchen bzw. Fehlerkorrektur
- A3.9 E-mails
- A3.10 Externe Systeme
- A3.11 Administration
- A3.12 Basisbefehle
4.8 Git auf dem Server - GitLab
GitLab
GitWeb ist jedoch ein recht übersichtliches Tool. Wenn du einen modernen, voll ausgestatteten Git-Server suchst, gibt es einige Open-Source-Lösungen, die du stattdessen installieren kannst. Da GitLab einer der beliebtesten ist, werden wir uns mit der Installation im Detail befassen und es als Beispiel verwenden. Dies ist etwas schwieriger als die GitWeb-Option und erfordert mehr Wartung, aber es ist eine viel umfassendere Lösung.
Installation
GitLab ist eine datenbankgestützte Webanwendung, so dass die Installation etwas aufwändiger ist als bei einigen anderen Git-Servern. Glücklicherweise ist dieser Prozess sehr gut dokumentiert und unterstützt. GitLab empfiehlt dringend, GitLab über das offizielle Omnibus GitLab-Paket zu installieren.
Die anderen Installationsmethoden sind:
-
GitLab Helm-Chart zur Verwendung mit Kubernetes.
-
Dockerisierte GitLab-Pakete zur Verwendung mit Docker.
-
Direkt aus den Quelldateien.
-
Cloud-Anbieter wie AWS, Google Cloud Platform, Azure, OpenShift und Digital Ocean.
Weitere Informationen findest du in der Readme-Datei GitLab Community Edition (CE).
Administration
Die Verwaltungsoberfläche von GitLab wird ist webbasiert.
Benutze einfach deinen Browser, um den Hostnamen oder die IP-Adresse, auf der GitLab installiert ist, anzugeben, und melden dich als Admin-Benutzer an.
Der Standardbenutzername ist admin@local.host
, das Standardpasswort ist 5iveL!fe
(dies muss nach der Eingabe geändert werden).
Klicke nach der Anmeldung im Menü oben rechts auf das Symbol „Admin-Bereich“.
Benutzer
Jeder Gitlab Nutzer muß ein Benutzerkonto besitzen.
Benutzerkonten sind recht simple. Hauptsächlich beinhalten sie persönliche Informationen, die an Login-Daten geknüpft sind.
Jedes Benutzerkonto hat einen namespace (Namensraum), der eine logische Gruppierung von Projekten ist, die diesem Benutzer gehören.
Wenn der Benutzer jane ein Projekt mit dem Namen project hätte, wäre die URL dieses Projekts http://server/jane/project
.
Das Löschen eines Benutzers kann auf zwei Arten erfolgen. Das „Blockieren“ eines Benutzers verhindert, dass er sich am GitLab anmeldet. Alle Daten unter den Namensraum dieses Benutzers bleiben jedoch erhalten. Mit der E-Mail-Adresse dieses Benutzers signierte Commits werden weiterhin mit seinem Profil verknüpft.
Das „Zerstören“ eines Benutzers hingegen entfernt ihn vollständig aus der Datenbank und dem Dateisystem. Alle Projekte und Daten in seinem Namensraum werden entfernt, und alle Gruppen, die sich in seinem Besitz befinden, werden ebenfalls entfernt. Das ist eine permanente und destruktive Aktion, die in der Regel selten angewendet wird.
Gruppen
Eine GitLab-Gruppe ist eine Sammlung von Projekten. Zusätzlich beinhaltet sie Daten, wie Benutzer auf diese Projekte zugreifen können.
Jede Gruppe hat einen Projektnamensraum (genauso wie Benutzer). Wenn die Gruppe training ein Projekt materials hat, lautet die URL http://server/training/materials
.
Jeder Gruppe ist einer Reihe von Benutzern zugeordnet, von denen jeder eine Berechtigungsstufe für die Projekte der Gruppe und der Gruppe selbst hat. Diese reichen von „Guest“ (nur Themen und Chat) bis hin zu „Owner“ (volle Kontrolle über die Gruppe, ihre Mitglieder und ihre Projekte). Die Arten von Berechtigungen sind zu zahlreich, um sie hier aufzulisten, aber GitLab hat einen hilfreichen Link auf dem Administrationsbildschirm.
Projekte
Ein GitLab-Projekt entspricht in etwa einem einzelnen Git-Repository. Jedes Projekt gehört zu einem einzigen Namensraum, entweder einem Benutzer oder einer Gruppe. Wenn das Projekt einem Benutzer gehört, hat dieser Projektbesitzer die direkte Kontrolle darüber, wer Zugriff auf das Projekt hat. Falls das Projekt einer Gruppe gehört, werden auch die Berechtigungen der Gruppe auf Benutzerebene wirksam.
Jedes Projekt hat eine Zugriffsebene, die steuert, wer Lesezugriff auf die Seiten und das Repository des Projekts hat.
Wenn ein Projekt privat ist, muss der Eigentümer des Projekts Benutzern explizit Zugriff gewähren.
Ein internes Projekt ist für jeden angemeldeten Benutzer sichtbar. Ein öffentliches (engl. public) Projekt ist für jeden sichtbar.
Beachte, dass dies sowohl den Zugriff auf git fetch
als auch den Zugriff auf die Web-Benutzeroberfläche für dieses Projekt steuert.
Hooks
GitLab bietet Unterstützung für Hooks, sowohl auf Projekt- als auch auf Systemebene. Für beides führt der GitLab-Server einen HTTP POST mit einem beschreibenden JSON durch, wenn relevante Ereignisse eintreten. Auf diese Weise kannst du deine Git-Repositorys und GitLab-Instanzen mit dem Rest deiner Entwicklungsplattform verbinden, wie z.B. CI-Server, Chatrooms oder Deploymenttools.
Grundlegende Anwendung
Das erste, was du mit GitLab machen solltest, ist das Erstellen eines neuen Projekts. Dies geschieht durch Anklicken des Symbols „+“ in der Symbolleiste. Du wirst nach dem Namen des Projekts gefragt, zu welchem Namensraum es gehören soll und wie seine Sichtbarkeit sein soll. Das meiste, was du hier angibst, ist nicht permanent und kann später über die Konfigurations-Oberfläche angepasst werden. Klicke auf „Projekt erstellen“, und du bist fertig.
Sobald das Projekt existiert, wirst du es vermutlich mit einem lokalen Git-Repository verbinden wollen.
Jedes Projekt ist über HTTPS oder SSH zugänglich. Beide können genutzt werden, um ein Git-Remote zu konfigurieren.
Die URLs sind oben auf der Startseite des Projekts sichtbar.
Für ein bestehendes lokales Repository erstellt dieser Befehl einen Remote mit Namen gitlab
für die gehostete Instanz:
$ git remote add gitlab https://server/namespace/project.git
Wenn du noch keine lokale Kopie des Repositorys hast, kannst du das ganz einfach nachholen:
$ git clone https://server/namespace/project.git
Die Web-Benutzeroberfläche bietet Zugriff auf viele nützliche Informationen des Repositorys. Die Homepage jedes Projekts zeigt die letzten Aktivitäten an. Die Links oben zeigen verschiedene Ansichten der Projektdateien und zum Commit-Log.
Zusammen arbeiten
Die einfachste Art der Zusammenarbeit bei einem GitLab-Projekt besteht darin, jedem Benutzer direkten Push-Zugriff auf das Git-Repository zu ermöglichen. Du kannst einem Benutzer zu einem Projekt hinzufügen, indem du im Abschnitt „Mitglieder“ der Einstellungen dieses Projekts den neuen Benutzer einer Zugriffsebene zuordnest. Die verschiedenen Zugriffsebenen werden in den Gruppen erläutert. Indem ein Benutzer die Zugriffsebene „Developer“ oder höher erhält, kann dieser Benutzer Commits und Branches direkt und ohne Einschränkung in das Repository pushen.
Eine weitere, stärker entkoppelte Art der Zusammenarbeit ist die Nutzung von Merge-Requests.
Diese Funktion ermöglicht es jedem Benutzer, der ein Projekt sehen kann, kontrollierter dazu beizutragen.
Benutzer mit direktem Zugriff können einfach einen Branch erstellen, auf ihn committen und einen Merge-Request von ihrem Branch zurück in den master
oder einen anderen Branch einreichen.
Benutzer, die keine Push-Berechtigungen für ein Repository haben, können es „forken“ (ihre eigene Kopie erstellen), Push-Commits für diese Kopie erstellen und einen Merge-Request von ihrer Fork zurück zum Hauptprojekt einreichen.
Dieses Modell ermöglicht es dem Eigentümer, die volle Kontrolle darüber zu behalten, was wann in das Repository gelangt, und gleichzeitig Beiträge von unbekannten Benutzern zu ermöglichen.
Merge-Requests und Issues sind die Hauptelemente von langlebigen Diskussionen in GitLab. Jede Merge-Request ermöglicht eine zeilenweise Diskussion der vorgeschlagenen Änderung. Damit kann eine einfache Code-Überprüfung (engl. Code-Review) sowie ein Diskussionsstrang umgesetzt werden. Beide können Benutzern zugeordnet oder in Meilensteine organisiert werden.
Dieser Abschnitt konzentriert sich hauptsächlich auf die Git-bezogenen Funktionen von GitLab. Als ausgereiftes Programm bietet es viele weitere Funktionen, die dir bei der Teamarbeit helfen, wie Projekt-Wikis und System-Wartungstools. Ein Vorteil von GitLab ist, dass du nach der Einrichtung und Inbetriebnahme des Servers selten eine Konfigurationsdatei anpassen oder über SSH auf den Server zugreifen musst. Die überwiegende Verwaltung und allgemeine Nutzung kann über die Browser-Oberfläche erfolgen.