Installation und Konfiguration von Git,
Gitosis
und Gitweb unter Debian 5 (Lenny).
Das folgende Setup erstreckt sich über 3 Rechner:
Warum man seinen Code versionieren sollte, müsste eigentlich jedem Entwickler klar sein, das Drupal in Zukunft auf Git setzen wird, dürfte wohl der Anreiz für Drupalentwickler sein sich frühzeitig mit dem Thema Git zu auseinanderzusetzen.
Hätte, würde, wäre
Hätte ich an der Session von Daniel und Eugen über Git, die meiner Meinung nach eine der besten Session auf dem DrupalCamp Essen war einen Monat früher teilgenommen,
hätte ich Gitoltite bei unserem jetzigen Projekt eingesetzt und dieses Howto würde eben von Gitolite handeln...
...wäre besser, da gitolite unter anderem Berechtigungen auf Branch-Ebene vergeben kann...
Installation von git, gitosis und gitweb über aptitude als Benutzer root auf birgit:
Bei der Installation von gitosis wird unter Debian der Systembenutzer gitosis mit /srv/gitosis als Heimatverzeichnis angelegt.
Auf nora ein SSH-Schlüsselpaar für den Benutzer florian erstellen:
Öffentlichen Schlüssel auf den Server birgit, der später als zentrales Repository fungieren soll kopieren:
Auf birgit Gitosis mit dem eben kopiertem Public-Key initialisieren:
Dies erzeugt die folgende Ausgabe:
Durch die Initialisierung sind in /srv/gitosis die folgenden Verzeichnisse entstanden:
Als Benutzer florian auf nora das Repository gitosis-admin klonen:
Das durch das Klonen entstandene Verzeichnis gitosis-admin/ hat den folgenden Inhalt:
Achtung!
Falls auf dem Server, auf dem Gitosis und somit in unserm Fall auch SSH läuft
ein Non Default Port verwendet wird, also nicht Port 22,
so ändert sich die in den folgenden Schritten die Git-URL.
In unserem Fall wird
zu
Beispielhaft für das Repository gitosis-admin mit einem SSHD welcher auf Port 1337 lauscht:
Mehr zu Git URLS findet sich in der Manpage zu git-clone.
Damit der neue Benutzer, hier florian@demine später selbständig weitere Repositories anlegen kann
muss er Mitglied in der Gruppe gitosis-admin werden.
Auf nora als Benutzer florian, die Datei gitosis.conf im bereits geklonten gitosis-admin Resopitory bearbeiten, um in der members Direktive von [group gitosis-admin] den Benutzer florian@demine hizufügen:
Anschließend, ein Commit mit aussagekräftiger Commit-Message (-m)...
Output
...und ein push um den Commit auf den Server zu übertragen:
Output:
Zuerst muss wieder für den jew. Benutzer ein SSH-Key angelegt werden, falls noch kein Key da ist, damit sich der Benutzer über diesen Key am gitiosis Konto anmelden kann.
Als florian auf demine:
Defaults übernehmen
Falls Windows Rechner als Clients verwendet werden sollen,
hilft PuttyGen von der Putty Downloadseite bei der Erstellung des SSH-Public-Keys.
Hier muss ggf. nach der öffentliche SSH-Schlüssel in ein für OpenSSH verständliches Format konvertiert werden.
Anschießend den Teil mit dem öffentlichen Schlüssel per nach /tmp/ auf nora kopieren und gleichzeitig nach Schema user@host.pub umbenennen:
Weiter im Kontext mit florian auf nora um florian@demine.pub in der Verzeichnis keydir zu kopieren:
Achtung: Der Key muss die Dateiendung .pub haben!
Die Datei florian@demine.pub in das gitosis-admin Repository aufnehmen:
Und wieder ein commit...
...und wieder ein push, damit die Änderungen auf birgit auch wirksam werden.
Jetzt können wir mit unserem frischgebackenem Admin-User florian@demine neue Repositories anlegen.
Als florian@demine auf der lokalen Workstation:
gitosis-admin.git auschecken
Da sich florian@demine bis jetzt noch nicht verbunden hat, muss dem ersten Verbindungsversuch über SSH mit yes zugestimmt werden:
Wechsel in das soeben geklonte Repository:
Die folgende Sektion, hier examplarisch die Gruppe developers, die auf hongomat unter writable Schreibzugriff haben soll der Datei gitosis.conf hinzufügen:
...wieder ein commit:
...und wieder ein push:
Jetzt kann als florian@demine ein neues Repository, hier "hongomat"
angelegt werden:
Mit git init wird das Repository initialisiert,
es ist ein initialer Commit nötig.
Bei dem git remote add Statement wird mit birgit:hongomat.git das Remote Repository bestimmt.
Siehe SSH Port und GIT URLS bei Abweichung vom SSH-Standard-Port (22).
Der push Befehl schiebt alles in unser zentrales Repository auf brigit.
Einrichtung von gitweb der Weboberfläche für Git.
Die Konfigurationsdatei für Gitweb,
hier angepasst $projectroot welche auf das Verzeichnis /srv/gitosis/repositories, in dem gitosis seine Repos ablegt zeigt.
# directory to use for temp files
$git_temp = "/tmp";
# target of the home link on top of all pages
#$home_link = $my_uri || "/";
# html text to include at home page
$home_text = "indextext.html";
# file with project list; by default, simply scan the projectroot dir.
$projects_list = $projectroot;
# stylesheet to use
$stylesheet = "/gitweb.css";
# logo to use
$logo = "/git-logo.png";
# the 'favicon'
$favicon = "/git-favicon.png";
'
Auf birgit, die Datei /etc/apache2/sites-available/birgit.example.com mit dem folgendem Inhalt anlegen:
Da wir in einem verteiltem Team arbeiten und Gitweb aus dem Internet aufrufbar ist,
In unserem Fall ist dies eine Atrium Installation, in der jeder Entwickler ein Benutzerkonto besitzt.
Htaccess mit Authentifizierung an einer MySQL basierten Drupal-Installation.
Installation des benötigten Apache Moduls
Aktivierung des authmysql-Moduls
Was in Kontext des VirtualHost's so aussieht:
Aktivieren der site:
Die Konfiguration des Apachen neu einlesen:
Damit der Webserver auch die Repositories in Gitweb anzeigen kann,
habe ich den Benutzer gitosis der Gruppe www-data hinzugefügt.
Als root:
Auswertungsreihenfolge:
/etc/gitconfig~/.gitconfig.git/configRedimentär, nur Name und EMail nach Eingabe des obigen git config Befehls.
Die --global Option bewirkt das Schreiben nach ~/.gitconfig, ohne diese Option wäre es .git/config.
Nach dem abesetzen der beiden git config Befehle hat die Datei ~/.gitconfig den folegende Inhalt:
Um z.B. Commit-Messages direkt mit dem gewüschten Editor schreiben zu können, falls man sich die m-Option beim git commit weglässt.
Folgende Funktion für die Anzeige des aktuellen Branches, eingeschlossen in weissen, runden Klammern, zur Plazierung in ~/.bashrc.
Die folgende Funktion stellt den Status des Repositories,
im Falle von nicht commiteten Dateien bzw. Änderungen wird das ± Zeichen in rot, ansonsten in grün angezeigt.
Plazierung ebenfalls in ~/.bashrc.
Weiter unten in der ~/.bashrc die Definition der Variable PS1 im if-Statement eines Debian bzw. Ubuntu Systems,
welches greift,
wenn force_color_prompt=yes gesetzt ist.
Sieht dann später in einem Git Verzeichnis ohne Farbe so aus:
Siehe auch:
Git
Git Hooks
Gitosis
Gitweb
Git-GUI's und -Clients
Git und Drupal