======Aufsetzen eines Git-Servers mittels Gitolite======
Um einen Git-Server aufzusetzen, benötigt es unter Linux nicht viel Software. Gitolite, ein Werkzeug, welches Git mit SSH verbindet, hilft, die Einrichtung eines Servers sehr einfach zu gestalten. Das Besondere an Gitolite ist zudem, dass die Administration des Git-Servers ebenfalls über ein Git-Repository verläuft. Diesem Wiki-Eintrag liegt einem Wiki-Eintrag der UbuntuUsers-Community (([[https://wiki.ubuntuusers.de/Gitolite/]])) sowie das Handbuch für Gitolite (([[http://gitolite.com/gitolite/gitolite.html]])) zu Grunde.
===== Installation von Gitolite =====
Um Gitolite zu installieren, genügt es unter Debian folgenden Befehl auszuführen:
sudo apt-get install gitolite
Bzw. unter Ubuntu 16.04:
sudo apt-get install gitolite3
===== Konfiguration =====
Damit Gitolite einwandfrei funktionieren kann, muss zunächst der zukünftige Administrator seinen öffentlichen SSH-Schlüssel auf den Server transferieren. Sofern noch kein Schlüssel für SSH erstellt wurde, kann dieser mit dem folgenden Befehl generiert werden:
ssh-keygen -t rsa
Der nun erzeugte öffentliche Schlüssel (erkennbar an der Endung .pub) muss nun auf den Server transferiert werden. Hierzu eignet sich beispielsweise SCP:
scp /pfad/zum/generierten/schluessel.pub username@example.org:/tmp/git-admin.pub
===== Einrichtung =====
Gitolite kann nun auf dem Server eingerichtet werden. Auf dem Server muss nun folgender Befehl eingegeben werden:
sudo dpkg-reconfigure gitolite
Hierbei werden drei Fragen gestellt:
- Standart-Benutzername für Gitolite: Dieser Name wird später bei jedem Git-Projekt verwendet. Als Standard ist ''gitolite'' eingetragen, was auch so gelassen werden kann
- Homeverzeichnis des Benutzers: In diesem Verzeichnis werden später alle Git-Projekte verwaltet. Als Standard ist ''/var/lib/gitolite'' eingetragen, was ebenfalls so gelassen werden kann
- Pfad des Admin-Schlüssels: Hier muss der Pfad zum hochgeladenen öffentlichen Schlüssels eingetragen werden, der via SCP angegeben wurde. Im aktuellen Beispiel wäre es ''/tmp/git-admin.pub''
Die Einrichtung von Gitolite ist nun abgeschlossen
====== Verwendung von Gitolite ======
Gitolite ist nun fertig konfiguriert und kann nun verwendet werden. Der Computer, von dem der öffentliche Admin-Schlüssel hochgeladen wurde, muss sich nun das administrative Git-Repository herunterladen. Dies kann in ein beliebigen Verzeichnis erfolgen:
git clone gitolite@example.org:gitolite-admin
Im Verzeichnis befinden sich nun folgende Ordner:
* conf: Das Verzeichnis beinhaltet die Datei ''gitolite.conf'' und beinhaltet die Einstellungen für die Git-Repositories
* keydir: Das Verzeichnis beinhaltet alle öffentlichen Schlüssel von den Computern, die mit Git-Repositories auf diesem Server agieren
===== Administration =====
Um Git-Repositories administrieren zu können, muss die Datei ''conf/gitolite.conf'' geöffnet werden. Der Inhalt dieser Datei sieht wie folgt aus:
repo gitolite-admin
RW+ = admin
repo testing
RW+ = @all
Der Zugriff auf das testing-Repo kann gelöscht werden, in dem die Zeilen 4+5 gelöscht werden. Um neue Repositories hinzuzufügen, hier eine kurze Erläuterung der Syntax:
* Mit ''repo '' wird ein neues Repo erzeugt. Es muss mindestens ein Benutzer zu diesem Repository gehören, damit es angelegt wird.
* Mithilfe bestimmter Berechtigungen können Benutzer zu einem Repository hinzugefügt werden:
^ Syntax ^ Erläuterung ^
| R | Benutzer erhält nur lesenden Zugriff |
| RW | Benutzer erhält auch schreibenen Zugriff |
| RW+ | Benutzer erhält erweiterte Berechtigungen (Push zurückziehen oder Referenzen löschen) |
Es existieren noch weitere Berechtigungen, die [[http://gitolite.com/gitolite/gitolite.html#write-types|hier]] nachgelesen werden können
Neu hinzugefügte Repos können dann unter dem folgenden Link geklont werden:
git clone gitolite@example.org:NeuerRepoName
==== Benutzergruppen ====
Es ist unter Gitolite auch möglich, Benutzergruppen festzulegen. Dies kann mit der folgenden Syntax erledigt werden:
@entwickler = eifx deedee0815
repo test
RW+ = @entwickler
Auch Gruppen in Gruppen sind möglich. Hierbei verhält sich Gitolite jedoch recht konservativ:
@gruppea = a b
@gruppeb = c @gruppea
@gruppea = x
''x'' ist nicht in diesem Beispiel nicht Mitglied der Gruppe ''gruppeb''
Weitere Möglichkeiten können [[http://gitolite.com/gitolite/gitolite.html#groups|hier]] entnommen werden.
==== Rechtevergabe auf Branches / Referenzen ====
Mithilfe von Gitolite ist es außerdem möglich, bestimmte Berechtigungen nur auf bestimmte Branches / Referenzen zu vergeben. Hier ein kleines Beispiel:
repo test
RW+ = alice
- master = bob
- refs/tags/v[0-9] = bob
RW+ dev/ = bob
RW = bob
Erläuterung:
* Alice darf im Repo ''test'' alles
* Bob darf im Repo ''test'' normal arbeiten, jedoch keine Referenzen anlegen oder löschen (wegen Zeile 6)
* Bob darf aber in allen Branches die mit ''dev/'' beginnen auch Referenzen anlegen oder löschen (wegen Zeile 5)
* Bob darf nicht (dafür steht das Minus) Tags anlegen, die mit ''v'' und einer Zahl beginnen (wegen Zeile 4)
* Bob hat keine Berechtigungen für den Branch ''master''