gitphp-glip - Dezentrale Versionverwaltung auf php Basis

Gitphp-glip ist eine kostengünstige allerorts brauchbare Alternative eines Git Servers. Das Programm git (offizielle Webseite) (git auf Wikipedia.org) wurde im April 2005 von Linus Torvalds begonnen. Sollte zu dieser Zeit die Quellcode-Verwaltung des Linux-Kernels übernehmen. Zu diesem Zeitpunkt gab es keine freie Software zur verteilten Versionsverwaltung von Dateien. Nun sind einige Jahre vergangen und so wurde dieses Programm von einer Vielzahl von anderen Projekten genutzt und weiterentwickelt.

Für viele Entwickler ist es wichtig einen zentralen Ort anbieten zu können, bei dem der offzielle Branch (Zweig) eines Projektes für jederman verfügbar ist. So können die Mitwirkenden und neuen Entwickler sich immer den Quellcode klonen. Da viele jedoch aus finanzielen Gründen keinen eigenen Server sich leisten können, ist das Interesse an kostengünstigen Anbietern recht hoch. So gründeten sich Firmen wie GitHub. Nun gibt es wiederum Menschen die nicht unbedingt dort ihre Projekte anbieten wollen, die Gründe hierfür sind so vielfältig, das hier nicht weiter drauf eingangen wird. So versuchen nun eine Handvoll Entwickler die kostengünstigen Webspace Anbieter mit git zu verbinden. Da auf diesen Servern der Anbieter meist PHP als serverseitige Programmiersprache angeboten wird entschied sich Zack Bartel git-php eine Web Oberfläche zu erstellen. Jedoch wollten einige Entwickler nicht nur den Quellcode über den Browser sehen. So gibt es seit einiger Zeit eine glib. Es wurde von Patrik Fimml erstellt und seit dem mehrfach aufgegriffen. Ein Entwickler namens Upliner Mikhalych nutze diese Bibliothek und git-php mit der Smarty template engine um daraus einen Browser (Betrachter) und eines git Repository (engl. für Lager, Depot) zu machen. Der Vorteil dieser Kombination ist nun, dass jeder mit einem kostengünstigen Webspace sich ein zentralen git Server aufstellen kann. Hier sei jedoch angemerkt, das gitphp-glip die Geschwindigkeit und der Funktionsumfang mit dem originalen git sind nicht zu vergleichen. Es soll git auch nicht ersetzen, sondern nur eine weitere Möglichkeit der Nutzung mit sich bringen.

Zuerst nutze gitphp-glip für die Übertragung der Daten webdav. Mit einer sehr aktuellen Version von gitphp-glip (aus dem github repository) und git (> 1.6.x) kann man nun auch ohne webdav Dateien übertragen.

 

Aufsetzen eines eigenen Servers

Als erstes läd mach sich die aktuellen Versionen runter:

git php5 lib: http://github.com/Upliner/glip
git php5 browser: http://github.com/Upliner/gitphp-glip

Danach passt man die Konfigurationsdatei an gitphp/gitphp.conf.php mit folgenden Einstellungen:

$gitphp_conf['projectroot'] = "/gitprojects/";

Wenn man schon ein git repository auf seinen Computer für sein Projekt hat braucht nur dieses zu klonen:

 
$ git clone --bare /lokalerpfad/repo /kopie/repo-name
$ cd /kopie/repo-name
$ git update-server-info

Der Befehl git update-server-info bewirkt das notwendige Dateien mit Hash Werten erstellt werden.

Durch einen Fehler in git werden beim Erstellen einige dringend gebrauchte Dateien nicht angelegt. Nun müssen diese manuell erstellt werden. In die 2 Dateien .git/refs/heads/master und .git/logs/refs/heads/master muss der letzte Hash eingetragen werden.

Nun ist es so weit, wir können das PHP Script und die Kopie des Repository auf den Server (Webspace) hochgeladen.

Erste Gehversuche: Push / Upload

Wie üblich nutzt man git mit einem Remote Repository und kann dies wie immer erstellen. Doch beim Klonen wird standardmäßig "origin" als remote eingetragen. Dieser kann jedoch nur zum "pullen" genutzt werden. Um die eigenen Änderungen auch auf dem remote "pushen" zu können muss eine extra "pushurl" verwendet werden.

$ git remote add pushName http://push.url.
$ git push remote pushName branchName


Fetch refs anpassen:

origin = pull
pushOrigin = push
Git config anpassen (.git/config):


ORIG:

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://example.tld/git/project.git


ANGEPASST:

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/pushOrigin/*
url = http://example.tld/git/project.git


Anmerkung zum Schluss:
Da jedes Software Projekt viel Zeit in Anspruch nimmt und immer Entwickler und Helfer jeder Art braucht, hier nun ein Aufruf zum mitwirken.