cmllr.eu

Pinguinhaltiges Geschwafel seit 2012.

[Tutorial] Wie mache ich aus meinem Raspberry Pi einen Git – Server?

Git ist ein Versionsverwaltungssystem, dass sich vielfältig benutzen lässt. Zwar zielt Git primär auf Softwareentwickler, aber man stelle sich vor, man möchte Dokumente verwalten und ggf. alte Versionen wiederherstellen. Auch hier könnte man Git zum verwalten verschiedener Versionen von Dokumenten nutzen. Zwar gibt es auch wirklich hervorragende Dienste (z. B. GitHub), auf denen man sich Repositories einrichten kann, jedoch sind diese zumeist öffentlich und private Repositories sind nur gegen eine monatliche Gebühr einsetzbar. Außerdem möchte man gerne auch, dass ein privates Repository auch wirklich privat ist.

Wann bringt mir Git etwas (als Nicht-Programmierer)?

Wenn man beispielsweise an einem Dokument schreibt und z. B. den täglichen Status separat speichern will. Natürlich kann man das auch mittels separater Dateien machen, was jedoch auf Dauer den Überblick vermissen lässt. ### Voraussetzungen

  • Zeitaufwand: Ca. 15 Minuten – Aktueller Raspberry Pi/ aktuelles Linux-System – Webserver (für GitWeb) > Konsolenbefehle startend mit # werden mit Systemverwalterrechten (als root, mit sudo ausgeführt Konsolenbefehle startend mit $ können mit "normalen" Benutzerberechtigungen ausgeführt werden – sprich mit dem aktuellen Benutzer.

Installation

Ich schildere an dieser Stelle die Installation in einem Minimalumfang – Git inklusive eines minimalistischen Webinterfaces, das den Namen "GitWeb" trägt. Zuerst benötigt man natürlich Git und GitWeb. Die zugehörigen Pakete lassen sich einfach mittels der Linux – Paketverwaltung installieren z. B. mittels Debian/ Rasbian:
apt-get install git gitweb

Arch
pacman -S git gitweb

Fedora
yum -i git gitweb

Konfiguration

Git

Ich habe mir für meine Konfiguration einen neuen Benutzer angelegt, in dessen Homelaufwerk ich die Dateien speichere. Natürlich lassen sich die Dateien auch z. B. auf einer Festplatte oder in einem beliebigen Verzeichnis speichern. In diesem Falle ist es natürlich nicht notwendig, einen Benutzer anzulegen. Entsprechend muss man natürlich auch beachten, dass der Lesezugriff auch möglich ist.

In der Linux – Shell lässt sich mittels

adduser

Adduser frägt nach einem Passwort, das man vergibt. In dieser Konfigurationsvariante nutze ich den Benutzer "git" (natürlich jeder andere Name möglich), um später meine Änderungen auf dem Raspberry Pi zu speichern. Daher sollte man sich das Passwort merken, da es noch benötigt wird. Anschließend melden wir uns als Benutzer git an, was einfach mit
su git

möglich ist. Anschließend befinden wir uns im (leeren) Homelaufwerk, des neu angelegten Benutzers. > Zwecks Ordnung kann man sich z. B: einen Ordner für die in Git gespeichterten Projekte anlegen. Auch dies ist optional und hat mehr Geschmacks- und Ordnungsgründe. Ich nenne dieses Verzeichnis an dieser Stelle einfach "Repositories", was ich mir auch über die Shell anlege.

git@pi $ mkdir ./Repositoies

Anschließend ins neu erstellte Verzeichnis mittels "cd" wechseln
git@pi $ cd ./Repositories

Natürlich möchte ich nicht, dass alle Dateien in einem Projekt zusammengefasst werden. Daher erstelle ich mir mit dem "mkdir" – Befehl für jedes Projekt einen neuen leeren Ordner, der sich ggf. auch einfach backupen lässt. Den Ordnerpfad (hier für "Repositories") sollte man sich nun notieren bzw. merken, da er später notwendig ist. Ist man sich nicht sicher, in welchem Pfad man sich zur Zeit genau befindet, kann man mittels des Befehls "pwd" herausfinden, wo man sich gerade befindet. Angenommen ich befinde mich im gewünschten Ordner (hier "Scribble"), gilt es nun, ein Projekt zu initialisieren.
git@pi /Repositories/Scribble $ git –bare init

Es sollte nun eine Ausgabe wie
Initialized empty Git repository in {Pfad}

ausgegeben worden sein. Wichtig: Nach jeder Initalisierung muss man die dem Server bekannten Eigenschaften der Projektmappe mit folgendem Befehl aktualisieren:
$ git update-server-info

Die Git – Konfiguration ist somit erst einmal fertig. Die Schritte zum Initialisieren (git –bare init) und Aktualisieren (git update-server-info) sind jedoch jedes Mal von Nöten, wenn ein neues Projekt angelegt wird. #### Gitweb

Zunächst muss eine neue Seite angelegt werden, damit der Webserver Gitweb auch korrekt anzeigen kann. > Ich stelle hier nur die Variante für Apache2 dar, da ich diesen zur Zeit einsetze. Die Konfiguration für andere Webserver sollte sinngemäß übernehmbar sein.

Z. B. mittels "nano" kann ein neue Datei im Apache2 – Verzeichnis erstellt werden (der Name "gitlab" kann auch durch einen eigenen Wert ersetzt werden):
nano /etc/apache2/sites-available/gitweb

Listen 8080
<virtualhost>
        ScriptAlias /gitweb.cgi /usr/lib/cgi-bin/gitweb.cgi
        Alias /gitweb.css /usr/share/gitweb/gitweb.css
        Alias /gitweb.js /usr/share/gitweb/gitweb.js
        Alias /git-favicon.png /usr/share/gitweb/git-favicon.png
        Alias /git-logo.png /usr/share/gitweb/git-logo.png
        DocumentRoot /var/cache/git
        SetEnv GITWEB_CONFIG /etc/gitweb.conf  
        DirectoryIndex gitweb.cgi
</virtualhost>;

Anschließend Nano mit strg + o und Enter verlassen. Als letztes Apache2 die Seite mitteilen und neu starten

a2ensite gitweb

# service apache2 restart

Anschließend muss mit Nano (oder jedem anderen Texteditor die Datei "/etc/gitweb.conf" geöffnet und die Pfadangabe sinngemäß verändert werden, z. B. mithilfe von Nano:

nano /etc/gitweb.conf

Anschließend muss die Variable "$projectroot" enstprechend dem unten gezeigten Beispiel ergänzt werden (sonst findet es ja nichts ;))
$projectroot = "/der/Pfad/zu/den/Repositories";

Im Browser sollte nun unter http://IPDESPI:8080 Gitweb erreichbar sein ;). ### Git benutzen

Möchte man das aktuelle, auf dem Server vorhandene "Abbild" laden, so muss man wie folgt vorgehen:
git clone ssh://user@IPDESPI/vollständiger/pfad/zum/ordner/

Und um Änderungen ohne einen extra Zweig zum Server zu übermitteln, kann man folgenden Befehl nutzen:
git commit -m "Mit >commit
git push ssh://user@IPDESPI/vollständiger/pfad/zum/ordner master
Nachdem ich etwas "gepusht" habe, kann ich diese auch in Gitweb selbst betrachten (klicken für die größere Ansicht):

<a href="http://phisco.rigel.uberspace.de/0fury/blog/wp-content/uploads/2014/02/gitweb.png" target="_blank"><img alt="gitweb" class="alignleft  wp-image-1584" height="241" src="http://phisco.rigel.uberspace.de/0fury/blog/wp-content/uploads/2014/02/gitweb.png" width="1671"></img></a>

 

Natürlich lassen sich in Git verschiedene Zweige verwalten, so genannte Branches. Da dies aber bereits vielfach im Internet erklärt wurde, verlinke ich an dieser Stelle nur an <a href="http://git-scm.com/" target="_blank">http://git-scm.com/</a> (englisch). Dort sind auch für all diejenigen, die keine Konsole mögen, Git - Clients mit grafischer Oberfläche <a href="http://git-scm.com/downloads/guis" target="_blank">aufgelistet</a>.
<hr></hr><strong>Haftungsausschluss:</strong> Ich übernehme keinerlei Haftung für Schäden, die durch Befolgung der Schritte dieses Beitrages auftreten können. Es können auch hier Fehler und Unstimmigkeiten auftreten, die Fehler veursachen können. Ich habe die Tutorials in der Regel so erstellt, wie ich es bei meinem System auch durchgeführt hatte. Eventuelle Probleme sind dabei je nach Konfiguration möglich.
Fehler gefunden? Ich bin für einen Kommentar dankbar ;).
<hr></hr>
Quelle für Git - Logo: http://git-scm.com/downloads/logos