GIT ist, wie z.B. auch Subversion, eine freie Software zur Versions-Verwaltung für alle an einem Projekt beteiligten Team-Mitglieder. Auf dem Server (unser Raspberry PI) erfolgt die Installation des GIT-Servers und der Repositories zur zentralen Ablage aller Dateien des Teams. Zusätzlich sollte für jedes Team-Mitglied ein User mit entsprechenden Zugriffsrechten auf das GIT-Repository angelegt werden. Für meine Tests mit GIT verwende ich einfach den User pi des Raspberry.
Auf jedem Client-Rechner eines Team-Mitglieds muss wiederum ein entsprechender GIT-Client für den Zugriff auf das Repository installiert werden. Hier gibt es für die unterschiedlichen Betriebsysteme sowohl Clients auf Kommandozeilen-Ebene als auch mit graphischer Oberfläche. Zusätzlich muss jedes Teammitglied einen funktionierenden SSH-Zugriff auf den GIT-Server haben.
Im Unterschied zu Subversion hat man in GIT die Möglichkeit auch mal Offline zu entwickeln, ohne immer eine Verbindung zum GIT-Server zu benötigen. Der komplette Inhalt des Projekts wird aus dem GIT-Repository in ein lokales Repository auf den Client-PC übertragen (Clone). Der Abgleich mit dem Repository erfolg dann in zwei Schritten. In einem ersten Schritt (commit) speichert man seine Änderungen erst mal in dem lokalen Repository des Client-PCs. Erst mit einem zweiten Schritt (push) lädt man seine Änderungen in das Repository auf dem Server.
Auf meinem iMAC mit OS/X verwende ich als Client für die ersten Tests mit dem Repository den GIT-Kommandozeilen-Client, der mit der Entwicklungsumgebung XCODE von Apple installiert wurde (nehme ich zumindest an, das der mit XCODE kam).
Als graphischen GIT-Client für das Projekt, werde ich dann ein Plugin für Eclipse verwenden, um bequem Daten aus- und ein zu checken.
Installation des GIT Servers
Dazu verwende ich wieder das Terminal-Programm auf dem iMAC und verbinde mich per ssh als Benutzer pi mit dem Raspberry. Weitere Infos dazu findet ihr z.B. hier: SSH-Verbindung mit dem Raspberry.
Zuerst installieren wir den GIT-Server auf dem Raspberry Pi im Home-Verzeichnis des Users pi mit dem Befehl:
sudo apt-get install git-core
Im Home-Verzeichnis hat GIT die Konfiguration-Datei .gitconfig angelegt. Diese Datei könnt ihr mit einem Editor, wie z.B. nano, bearbeiten. GIT stellt jedoch auch das Kommandozeilen-Tool config zur Verfügung. Damit könnt ihr neue Einträge in die .gitconfig hinzufügen. Als erstes setzen wir den Namen, die E-Mail-Adressse und den Lieblings-Editor:
git config user.name "Ford Prefect" git config user.mail ford@melmac.co git config core.editor nano
Danach erstellen wir ein Verzeichnis für die Repositories und wechseln in das Verzeichnis:
mkdir git cd git
Als nächstes erstellen wir das erste Repository und wechseln in das Verzeichnis:
mkdir webproject cd webproject
In einem letzten Schritt erstellen wir eine leere GIT-Verzeichnis-Struktur für das Repository:
git init --bare
GIT-Kommandozeilen-Client
Das neue Webprojekt muss nun vom Entwicklungsrechner eines Team-Mitglieds in das zentrale GIT-Repositroy “webproject” auf dem Raspberry GIT-Server übertragen werden, damit die anderen Team-Mitglieder später darauf zugreifen können.
Dazu auf dem Entwicklungsrechner zunächst ein GIT-Client installiert werden, der per SSH mit dem GIT-Server Verbindung aufnimmt. Das Übertragen der Projekt-Dateien erfolgt dann mit Hilfe dieses GIT-Clients einmalig zur Initialisierung. Jedes weitere Team-Mitglied kann sich die Projekt-Dateien per Cloning aus dem zentralen Repository laden.
Ich hab das zunächst mit dem Kommandozeilen-Tool GIT unter OS/X durchgeführt, um die grundlegende Arbeitsweise von GIT zu verstehen. Einfacher und komfortabler geht das natürliche mit eine GIT-GUI-Tool, wie einem Plugin in Eclipse.
Zunächst wechseln wir in das Projekt-Verzeichnis in der OS/X-Kommandozeile und legen ein leeres lokales Repository mit dem Befehl an:
git init
Auch in eurem Client solltet ihr die wichtigsten User-Daten für euer Projekt setzen:
git config user.name "John Doe" git config user.mail doe@melmac.co git config core.editor nano
Danach fügen wir alle bereits vorhandene Projekt-Dateien zu dem lokalen Repository hinzu:
git add . git commit -m "First commit"
Jetzt müssen wir einmalig den Server und das Repository auf dem GIT-Server definieren:
git remote add ourwebproject pi@eureRaspberryIP:/home/pi/git/webproject
Der Name ourwebproject ist frei wählbar. Das Verzeichnis muss mit dem Verzeichnis des Repositories auf eurem Raspberry Pi übereinstimmen. In diesem Fall ist es das Verzeichnis git/webproject im Home-Verzeichnis des Users pi.
Die URL “pi@eureRaspberryIP:/home/pi/git/webproject” wird von GIT in die Konfiguration-Datei config im Verzeichnis .git in eurem Projekt-Verzeichnis eingetragen. Die könnt ihr euch auch am Client mit folgendem Befehl anzeigen lassen:
git config --list
Nun können alle Dateien des Projekts in das Repository auf dem GIT-Server übertragen werden:
git push ourwebproject master
Den Status eures GIT-Repositories könnt ihr euch mit diesem Befehl anzeigen lassen:
git status
Status zeigt euch an, welche Dateien in eurem Projekt geändert wurden und ob sie bereits in euer lokales Repository “commited” wurden.
Angenommen ihr ändert eine Datei eures Projekts und möchtet diese Datei nun in das Repository auf dem Server hochladen. Dann macht ihr zunächst einen commit in das lokale Repository:
git commit -m "Second commit"
Falls ihr neue Dateien zu eurem lokalen Repository hinzufügen wollt, oder GIT darauf besteht hilft der Befehl:
git add .
Um die Änderungen nun in das Repository auf dem GIT-Server zu übertragen benötigt ihr den push-Befehl:
git push ourwebproject master
Damit ihr beim push nicht immer den Projektnamen und den Branch oder HEAD (master) angeben müsst könnt ihr das auch einmalig festlegen:
git push --set-upstream ourwebproject master
Danach funktioniert der push auf dem Server ganz einfach mit:
git push
Jedes weiter Teammitglied kann dann alle Projekt-Dateien mit git clone in ein beliebiges lokales Verzeichnis seines Rechner laden:
git clone pi@eureRaspberryIP:/home/pi/git/webproject
Danach kann mit den normalen git Befehlen gearbeitet werden.