Mit GIT kollaborativ Software entwickeln
Arbeitet man kollaborativ an Entwicklungsaufgaben (in meinem Fall PHP/MYSQL), ist das ohne eine Versionsverwaltung prinzipiell möglich, allerdings äußerst aufwendig und vor allem unproduktiv. Hat jemand eine Änderung an einer Datei vorgenommen, mailt er diese den anderen Mitgliedern zu, die fleißig die alte Datei durch die neue ersetzen. Hat man an dieser Stelle noch nicht die Lust verloren, wird das spätestens dann geschehen, wenn parallel an derselben Datei gearbeitet wurde und man diese nun zusammenfügen darf. Für diese Probleme gibt es eine Versionsverwaltung (siehe auch Versionskontrollsystem). Dadurch können leicht und vollkommen automatisiert alle vorgenommenen Änderungen an einen Server geschickt werden (sog. “Push”), von dem man sich zu Beginn der Arbeit wieder mit den aktuellen Versionen der Dateien versorgen kann (sog. “Pull”).
Ich verwende hierfür GIT, das in einigen riesigen Projekten erfolgreich verwendet wird (ich sage nur Linux Kernel, Google Android, Wine und viele mehr). Da mich die Installation und Konfiguration letztendlich doch einige Arbeit gekostet hat, dokumentiere ich hier mein Vorgehen unter Windows (Linuxuser bekommen das ganz sicher auch ohne meine Anleitung hin…)
Installation des Windows-Clients
Zuerst installiert man sich GIT für Windows (ich habe die Version Git-1.6.1-preview20081227.exe verwendet). Bei der Installation habe ich stur auf “Next>>” geklickt und überall die Standardwerte belassen (also Standardinstallationspfad, sowie GIT Bash only und OpenSSH verwenden) Dabei wird sowohl eine eigene Kommandozeile (Bash) installiert, als auch eine grafische Oberfläche (dazu später mehr). Nach der Installation startet man die GIT Bash (über das Windows-Startmenü).
Erstellen eines SSH Schlüsselpaars
Um das lokale Projekt mit dem Server zu synchronisieren, benötigt man ein SSH Schlüsselpaar zur verschlüsselten Synchronisierung. Hat man schon ein Schlüsselpaar, kann man diesen Punkt überspringen. Den Schlüssel legt man über die GIT Bash wie folgt an:
$ ssh-keygen -t rsa
Man wird nun nach einem Dateipfad gefragt und bestätigt den vorgegebenen Pfad mit Enter, und gibt ein gewünschtes Passwort (zweimal) ein. Die Datei C:\Dokumente und Einstellungen\$Benutzername\.ssh\id_rsa.pub öffnet man nun mit einem Texteditor und kopiert den kompletten Inhalt schonmal vorsorglich in die Zwischenablage (Strg+C).
Account bei unfuddle anlegen
Als nächstes legt man sich einen Account bei unfuddle.com an. Dieser Dienst bietet schon in der Grundversion viele nützliche Features, für die man bei ähnlichen Diensten wie dem Platzhirsch github.com oder codebase.com kostenpflichtig upgraden muss. Leider ist man bei unfuddle in der Grundversion auf 1 Projekt beschränkt.
Ist man anschließend eingeloggt, trägt man den aus dem vorangegangenen Schritt in die Zwischenablage kopierten Inhalt in den Personal Settings als Public Key ein.
Als nächstes erstellt man in unfuddle ein Projekt $Projektname.
Lokales Verzeichnis mit $Projektname synchronisieren
Man kann nun ein beliebiges Verzeichnis auf dem lokalen Rechner mit dem Projekt $Projektname in unfuddle synchronisieren. Hierzu gibt man in der GIT Bash folgende Befehle der Reihe nach ein. Zuerst wechselt man in das gewünschte Verzeichnis:
$ cd /pfad/zum/verzeichnis
Ist das Projekt beispielsweise in D:\Projekte\MeinProjekt abgelegt, lautet der korrekte Befehl cd /d/Projekte/MeinProjekt
$ git init
Hierdurch wird das Verzeichnis D:\Projekte\MeinProjekt\.git angelegt, das u.a. die Einstellungen und Änderungen für das Protokoll enthält.
$ git remote add unfuddle git@subdomain.unfuddle.com:subdomain/abbreviation.git
Hierbei muss subdomain durch den Benutzernamen und abbreviation durch den Projektnamen ersetzt werden. Die korrekten Daten findet man auch über das Dashboard von unfuddle (auf dem Repositories-Tab).
$ git config remote.unfuddle.push refs/heads/master:refs/heads/master
Legt wohl fest, welche Dateien gepusht werden sollen. (?)
git config core.autocrlf false
Diese Konfigurationseinstellung habe ich vorgenommen, da ich für jede Datei beim Push die Warnung LF will be replaced by CRLF in erhalten habe. Mit dieser Einstellung wird das automatische Umwandeln von Zeilenumbrüchen abgeschaltet.
$ git add *
$ git commit -am 'initial commit'
$ git push unfuddle master
Mit den ersten beiden Befehlen macht man das Verzeichnis mit dem Repository bekannt, erst der dritte Befehl führt den Push-Befehl tatsächlich aus:
Arbeiten mit dem Repository
Über die folgenden Befehle kann man nun “pushen” oder “pullen”:
$ git push unfuddle master
$ git pull unfuddle master
Wie ich am Anfang aber geschrieben habe, liegt dem Installationspaket auch eine grafische Benutzeroberfläche bei. Diese kann über den Punkt Git GUI im Startmenü gestartet werden. Dort kann über Neues Projektarchiv das verwendete Projektverzeichnis (oben war das D:\Projekte\MeinProjekt) hinzugefügt werden. Die Einstellungen werden dabei übernommen. Nun kann man über die Oberfläche das Repository verwalten:
Neu laden - aktualisiert die lokalen Änderungen
Alle bereitstellen – alle geänderten Dateien für den Upload ins Repository vorsehen
Eintragen (=Push) – Bereitgestellte Dateien ins Repository übertragen
Versenden – Erst durch das versenden, werden die obigen Funktion tatsächlich ausgelöst
In der GIT GUI kann man sich praktischerweise im Hauptmenü über Projektarchiv/Desktop-Icon erstellen eine Verknüpfung zum Repository auf den Desktop legen.

