2.4 Git Server
Im Kapitel 2 haben wir git init
bereits kennengelernt. Um ein Git Repository zur Kollaboration anzulegen, sind weitere Schritte nötig. Dies behandelt dieses Kapitel. Voraussetzung für dieses Kapitel ist SSH Zugriff inkl. Root Berechtigung auf ein beliebiges Linux System.
Git Protokolle
Um auf ein entferntes Git Repository zuzugreifen, gibt es in der Regel zwei Varianten:
- HTTPS
- SSH
Beide Protokolle bieten standardmässig Verschlüsselung, Authentifizierung und Komprimierung.
Git über HTTPS
Kurze Wiederholung: Um ein Repository über HTTPS zu klonen verwendet man
|
|
Dies ist die einfachste Variante um Code schnell herunterzuladen und lokal im eigenen Editor zu betrachten.
Vorteile:
- Anonymer Zugriff möglich
- Zugriff für Systeme, auf denen SSH weniger verbreitet ist
- HTTPS ist auf vielen Corporate Firewalls standardmässig offen…
Nachteile:
- Zwischenspeicherung der Anmeldedaten weniger benutzerfreundlich als mit SSH Keys
- Konfiguration des Webservers etwas komplizierter als die von SSH
Git über SSH
Um ein Repository mit SSH zu klonen, kommt folgender Befehl zum Einsatz:
|
|
Für die meisten Anwendungsfälle ist dies der bevorzugte Weg um entfernte Git Repositories zu verwenden.
Vorteile:
- SSH ist auf jedem Linux System bereits vorinstalliert (server- wie clientseitig)
- SSH Server sind sehr einfach zu konfigurieren
- Der Zugriff via SSH ist sehr sicher
Nachteile:
- Bietet keinen anonymen Zugriff
Weitere Möglichkeiten
- File
- Die wohl einfachste Möglichkeit um ein Git Repository mit anderen zusammen zu nutzen
- Repository kann z.B. auf einem gemeinsam genutzen NFS Share liegen, von dem man danach lokal das Repository klont
- Git Protokoll
- Unterstützt keine Authentifizierung
- Wird deswegen sinnvollerweise nur für Pull Operationen benutzt, wenn viel Traffic für ein Projekt erwartet wird
Git auf einem Server einrichten
Entfernte Git Repositories werden in einem Ordner mit der Endung .git
angelegt. Dies als eindeutige Kennzeichnung, dass es sich um ein “Bare Repo” handelt. Ein Bare Repository enthält kein Arbeitsverzeichnis. Dies bedeutet, dass auf der obersten Dateisystemebene des Repositories keine ausgecheckten Inhalte vorhanden sind. Aber sehen wir uns das gleich anhand eines Beispiels an.
Git Repository auf einem Server erstellen und lokal klonen
Hinweis: Bitte den Hostnamen “zwiseliserver42” in den Commands jeweils durch den eigenen Server ersetzen.
Wir erstellen wie folgt ein Repository auf einem Server unserer Wahl:
|
|
Beachte die Optionen von
git init
! Lies kurz in der Manpage nach was diese genau bewirken
Die Verzeichnisstruktur auf dem Server sieht danach wie folgt aus:
|
|
Klonen wir dieses Repo nun lokal auf unseren Client, sieht dies folgendermassen aus:
|
|
Wir haben das aktuell noch leere Repository erfolgreich geklont. Die auf dem Server vorhandenen Files liegen nun im Verzeichnis .git
.
Es wäre schön, wenn wir nun mit anderen Zwiselis zusammen etwas schönes entwickeln könnten. Dafür erstellen wir den User “rubeli” und das Directory .ssh
, um einen authorized Key für diesen Benutzer einzutragen:
|
|
Im untenstehenden Command
|
|
Somit haben wir (hoffentlich) eine funktionsfähige SSH Verbindung für den Benutzer rubeli. Ob diese funktioniert, sehen wir sofort, wenn wir probieren mit rubeli das Repository auszuchecken:
|
|
Somit wird klar, dass es für ein einfaches Repository zur Kollaboration Git-seitig absolut keine Einstellungen benötigt. Dies ist eine grosse Stärke von Git.
Hooks
Hooks sind eine praktische Möglichkeit, bei gewissen Aktionen in Git Scripts auszuführen die das Leben ungemein erleichtern. Der Einsatz von Hooks macht tendenziell nur mit entfernten Repositories Sinn. Soll zum Beispiel vor einem Commit die Syntax des Codes überprüft werden, ist dies mit einem lokalen Pre-Commit Hook möglich. In lokal ausgecheckten Repositories finden sich im Verzeichnis .git/hooks/
Beispiele für alle möglichen Anwendungsfälle.
Ebenfalls besteht die Möglichkeit, Hooks auf Serverseite zu konfigurieren. Mehr Infos zu Hooks gibt es hier
Git Server Software
Natürlich kommt man in der komplizierten Welt der IT mit den Bordmitteln von Linux und Git irgendwann mal an die Grenzen, und wünscht sich beispielsweise granularere Berechtigungsvergabe oder sogar ein webbasiertes UI. Hier eine (nicht abschliessende) Liste mit verfügbaren Tools, um sich das Leben bei der Verwaltung von Git Repositories vielleicht ein Bisschen einfacher zu machen:
- Gitea: https://gitea.io
- Gitolite: https://gitolite.com
- Gitosis: https://github.com/tv42/gitosis
- GitLab: https://gitlab.com/
- Bitbucket: https://bitbucket.org