Git-Server und Gitweb konfigurieren im Zusammenspiel mit Netbeans

Der Team Foundation Server von Microsoft eignet sich leider nur bedingt für Webprojekte. Eine gute Alternative einer Versionsentwicklung stellt daher Git dar. Die Versionskontrolle welche ursprünglich für die Sourcecode-Verwaltung des Linux-Kernels entwickelt wurden war, ist recht einfach einzurichten. In diesem Tutorial möchte ich die Einrichtung eines Git-Servers erklären und wie man diesen Server in Netbeans unter Windows benutzen kann. Des weiteren werde ich erklären wie man die Repositories von Git mit Hilfe von Gitweb im Browser durchstöbern kann.

1. Git-Server unter Ubuntu einrichten

sudo -s

Um Git nutzen zu können, müssen wir zu allererst Git installieren:

apt-get install git-core

Als Nächstes benötigen wir für den Git-Server einen Ort in dem die Repositories gespeichert werden und einen Benutzer welcher Git verwaltet. Dies können wir wunderbar kombinieren indem wir den Home-Ordner des Git-Users als Repository-Ort definieren.

Damit sich der Benutzer anmelden kann, muss noch ein Passwort festgelegt werden:

passwd git

Es empfiehlt sich außerdem dem Benutzer die Standard-Shell zu entziehen und stattdessen die git-shell zu spendieren:

usermod -s /usr/bin/git-shell git

Damit später die Entwickler auf die Repositories zugreifen können, wird noch eine Gruppe für die Entwickler benötigt:

groupadd developers

Um die Befehle in der git-shell benutzen zu können müssen diese erst in das Home-Verzeichnis von git kopiert und mit Benutzer/Gruppenrechten versehen werden. Andernfalls werden wir beim Einloggen mit folgender Fehlermeldung begrüßt “fatal: Interactive git shell is not enabled.”

# Commands kopieren
cp /usr/share/doc/git-core/contrib/git-shell-commands/ /stuff/git/ -R

# Rechte setzen
chown git:developers /stuff/git/git-shell-commands/ -R

# Ausführrechte setzen
chmod +x /stuff/git/git-shell-commands/help
chmod +x /stuff/git/git-shell-commands/list

Mit einem Testlogin sehen wir welche Befehle unter der git-shell möglich sind:

# root-Benutzer ausloggen
exit

# Als git-benutzer einloggen
xuad@tutorial~$ su git
Password:
Run 'help' for help, or 'exit' to leave.  Available commands:
list
git

# Anschließend wieder ausloggen und als Superuser einloggen
exit
sudo -s<

Jetzt wird es interessant! Wir legen unser erstes Git-Projekt an.

# Zum Home-Verzeichnis von git navigieren
cd /stuff/git

# Projektordner erstellen
mkdir project.git

# In den Projektordner wechseln und ein Repository ohne Arbeitsverzeichnis erzeugen
cd project.git
git --bare init

# Im Anschluss noch die Rechte anpassen
chown git:developers /stuff/git/project.git -R

Jetzt steht unser Git-Server und kann mit Daten gefüllt werden. Wir benötigen jedoch noch ein Initial-Commit um das Repository zu benutzen. Dazu initialisieren wir das leere Repository in einem leeren Ordner committen das Projekt:

# Ordner unter temp erstellen
mkdir /temp/gitinit

# Git-Repository initialisieren
cd /temp/gitinit
git init

#  Git-Repository Infos erstellen
git config --global user.name "Git-Admin"
git config --global user.email "info@xuad.net"

# Datei / Beispielbeschreibung erstellen
touch project_description

# Dateien zum Repository hinzufügen
git add .

# erstes Commit
git commit -m "initial commit"

Als Nächstes pushen wir den ersten Commit auf den Git-Server

git remote add origin git@192.168.1.115:/stuff/git/project.git
git push origin master

2. Netbeans mit git-Server verbinden

Wir clonen zunächst des Repository auf unseren Rechner:

1. Im Netbeans-Menü Git » Clone auswählen

image

2. Verbindungseinstellungen eingeben

image Anmerkung zum Verbinden von Außerhalb:
Wenn der Server in einem Heimnetz steht und man diesen von Außerhalb benutzen will, muss zu allererst der SSH-Port geforwardet werden und folgende URL verwendet werden:

# [IP] » öffentliche IP oder dyndns-Adresse
# [PORT] » geforwardeter Port
ssh://git@[IP]:[PORT]/stuff/git/project.git/

3. Branch wählen

image

4. Speicherort des Clones auswählen

image

5. Wir erstellen gleich ein Projekt, damit wir darin arbeiten können

image

6. Speicherort des Clones auswählen

image

image

7. Projekt konfigurieren

image

8. Wir sehen nun im Projektordner die Dateien, welche im Repository vorhanden sind und können damit arbeiten

image

3.1 Projektdateien hinzufügen und committen

Zum Testen ob alles funktioniert hat, können wir eine neue Datei anlegen und auf den Git-Server pushen.

1. Dazu erstellen wir eine neue Datei und fügen diese dem lokalen Git-Repository hinzu.

image

2. Änderungen committen

image

3. Commit Nachricht eingeben

image

4. Auf den Server pushen

image

5. Verbindung wählen

image

6. Branch wählen

image

7. Branch updaten

image Wenn es keine Fehlermeldung gegeben hat, ist dies schon mal ein gutes Zeichen Smiley mit geöffnetem Mund. Aber Kontrolle ist bekanntlich besser als Vertrauen. Dazu schauen wir auf dem Server nach, ob die Änderungen angekommen sind.

cd /stuff/git/project.git/

# Log ausgeben
git log

# Ausgabe:
commit 144c20a9f4deb0d773e80091863658a198156384
Author: xuad <info@xuad.net>
Date:   Sun Sep 23 12:51:40 2012 +0200

    neue Datei erzeugt

commit 1bc25b681a4ede88aede230563ff1e0ee20b4a91
Author: Git-Admin <info@xuad.net>
Date:   Sun Sep 23 12:24:45 2012 +0200

    initial commit

Wir sehen also, das der letzte Commit “neue Datei erzeugt” erfolgreich im Repository angekommen ist.

3. Gitweb installieren für das bequeme Browsen in den Repositories

Gitweb auf dem Server installieren:

apt-get install gitweb

Ordner im Webserver-Root erstellen:

mkdir /var/www/gitweb

In den neuen Ordner wechseln und einen Link zu den gitweb-Dateien erzeugen.

ln -s /usr/share/gitweb/* .

Apache-Konfiguration anpassen:

vi /etc/apache2/httpd.conf

# diesen Inhalt in die Konfiguration hinzufügen
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
Include /etc/gitweb/apache.conf
# Ordner erstellen
mkdir /etc/gitweb

# Konfiguration anlegen
vi /etc/gitweb/apache.conf

# Konfiguration einfügen

Options Indexes FollowSymlinks ExecCGI
DirectoryIndex /cgi-bin/gitweb.cgi
AllowOverride All

Als Nächstes wird die gitweb-Konfiguration angepasst:

vi /etc/gitweb.conf

In der Config wird der Pfad zu den Repositories angepasst, sowie Javascript und CSS-Dateien eingestellt. Die Beispielkonfiguration sollte danach folgendermaßen aussehen:

# path to git projects (.git)
$projectroot = "/stuff/git";

# directory to use for temp files/data
$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
@stylesheets = ("static/gitweb.css");

# javascript code for gitweb
$javascript = "static/gitweb.js";

# logo to use
$logo = "static/git-logo.png";

# the 'favicon'
#$favicon = "static/git-favicon.png";

# git-diff-tree(1) options to use for generated patches
#@diff_opts = ("-M");
@diff_opts = ();

Wir starten den Apache-Server neu und können im Browser (http://SERVER_IP/gitweb) gitweb benutzen:

/etc/init.d/apache2 restart

image

Wenn wir die Datei hello_git.php betrachten sieht das ein wenig langweilig aus.

image

Deshalb installieren wir kurzerhand das Syntax-Highlighting:

apt-get install highlight

Um das Syntax-Highlighting nutzen zu können, muss noch folgende Zeile in die /etc/gitweb.conf eingefügt werden:

$feature{'highlight'}{'default'} = [1];

Danach sollte die PHP-Datei so aussehen:

image

3.1 Gitweb absichern

Damit nicht alle die Repositories betrachten können, schützen wir Gitweb mit einer htaccess-Datei. Dazu erstellen wir eine .htpasswd-Datei außerhalb des Dokuemtenroot vom Apache:

cd /var
htpasswd -c .htpasswd benutzer

In den Gitweb-Ordner wechseln und .htaccess-Datei erzeugen:

cd /usr/share/gitweb
vi .htaccess

# Inhalt:
AuthType Basic
AuthName "geheimer Bereich"
AuthUserFile /var/.htpasswd
Require valid-user

Danach sollte unter http://SERVER_URL/gitweb eine Passwortabfrage erscheinen und der Bereich ist gesichert!

3.2 Gitweb den Style von Github verpassen

Auf https://github.com/kogakure/gitweb-theme kann man sich den Style von Github downloaden und installieren.

Quellen:

Git installieren: http://git-scm.com/book/de/Git-on-the-Server-Einrichten-des-Servers Gitweb installieren: http://blog.phlegx.com/2010/03/07/install-and-setup-gitweb-in-ubuntu-9-10-on-apache/