Git, iDisk und so
Am 03. Mai 2007 gab Linus Torvalds einen Google Tech Talk Linus Torvalds on git über das ursprünglich von ihm entwickelte Versionskontrollsystem Git. Der Vortrag ist stark geprägt von Linus' persönlichen Ansichten, dennoch war er der Anlass für mich, mal einen Blick auf Git unter Mac OS X zu werfen.
Installation
Für die Installation gibt es gleich mehrere Wege. Man kann den git-osx-installer runterladen, Git selber kompilieren wie im Artikel Installing Git 1.5.2.4 on Mac OS X Leopard beschrieben, oder einfach MacPorts verwenden, das ich eh schon installiert hatte. Mit letzterem genügt es, die Zeile
sudo port install git-core +svn
im Terminal einzugeben und ein paar Minuten zu warten. Nach Abschluss der Installation erzeugt der Befehl
which git
die folgende Ausgabe:
/opt/local/bin/git
Erstellung eines lokalen Repository
Ein lokales Repository lässt sich mit einem einzigen einfachen Befehl erzeugen, sofern man zuvor in das jeweilige Projektverzeichnis gewechselt hat (z.B. ~/Projects/PearApp):
cd ~/Projects/PearApp git init
Dabei spielt es keine Rolle, ob sich in diesem Verzeichnis schon Dateien befinden. Der Befehl legt lediglich ein neues Verzeichnis .git an, welches sämtliche Dateien des noch leeren Repository enthält.
Hinzufügen von Dateien
Das Hinzufügen einer Datei oder eines Verzeichnisses zum Repository geschieht mit folgenden Befehl:
git add PearApp.xcodeproj
Git durchsucht dabei angegebene Unterverzeichnisse rekursiv und berücksichtigt die darin gefundenen Dateien. Ergo lassen sich alle Dateien eines Projektes mit folgendem Befehl hinzufügen:
git add *
Will man eine ausführlichere Ausgabe erhalten, fügt man vorher den Parameter -v hinzu,
git add -v *
oder lässt sich nachträglich den Status anzeigen:
git status
Schließlich beendet man den Vorgang mittels
git commit -m "Initial revision."
Die Zeichenkette hinter dem Parameter -m beschreibt die Änderungen als so genannte "Commit Message". Lässt man den Parameter weg, so öffnet sich automatisch der bevorzugte Editor, um dort entsprechenden Text einzugeben.
Schieben und Ziehen
Einer der wesentlichen Unterschiede zwischen Git und anderen Versionskontrollsystemen, wie z.B. CVS oder Subversion, ist der dezentrale Ansatz. Es existiert kein zentraler Server, auf dem das einzige Repository gespeichert ist. Stattdessen besitzt jeder Benutzer seine eigene lokale Kopie des Repository. Jede Kopie ist im gewissen Sinne gleichberechtigt, d.h. es existiert per Definition kein Hauptentwicklungszweig des Projektes.
Zurück zum Beispielprojekt. Bisher liegt das erstelle Repository lediglich lokal unterhalb des Projektverzeichnisses. Will man mit mehreren Entwicklern zusammen arbeiten oder einfach seine Daten vor einer kaputten Festplatte, Diebstahl oder dem versehentlichen Löschen des Verzeichnisses bewahren, ist es sinnvoll, eine Kopie auf einem räumlichen getrennten Speicherplatz zu sichern. Ich verwende dafür die iDisk meines MobileMe-Kontos. Diese lässt sich so einrichten, dass sie auch offline verwendet werden kann und bei einer Verbindung mit dem Internet automatisch synchronisiert wird. Dazu ist in den Einstellungen von .mac lediglich der Button "Start" im Bereich "Synchronisierung der iDisk" zu drücken.
Die iDisk ist fortan im Verzeichnis /Volumes/${USERNAME} ansprechbar, egal ob man online oder offline ist. Das lokale Repository wird über den folgenden Befehl in ein Unterverzeichnis der iDisk geklont,
mkdir /Volumens/${USERNAME}/Repository/
cd ~/Projects/PearApp
git clone --bare . /Volumes/${USERNAME}/Repository/PearApp.git
und anschließend als zusätzliches Repository dem Projekt hinzugefügt:
git remote add idisk /Volumes/${USERNAME}/Repository/PearApp.git
Der Bezeichner nach "add" kann beliebig gewählt werden, das initiale Repository heißt stets "master", für das Repository auf der iDisk fiel meine Wahl auf "idisk".
Zwischen beiden Kopien tauscht man Dateien mittels Ziehen ("pull") und Schieben ("push") aus. Habe ich die Arbeit an einer Datei beendet, übergebe ich die Datei dem lokalen Repository ("commit") und schiebe dieses in das Repository auf der iDisk:
git commit -m "Did some changes." git push idisk
Umgekehrt ziehe ich Dateien von der iDisk, wenn ich diese beispielsweise im Büro bearbeitet und von dort aus eingecheckt habe:
git pull idisk
Stellt sich noch die Frage, wie bekomme ich überhaupt eine Kopie des Repository im Büro? Nichts einfacher als das:
git clone /Volumes/${USERNAME}/Repository/PearApp.git
Mehr Informationen
Zum Schluss noch ein paar Links zu Git, wovon besonders der letzte für Benutzer von Subversion interessant sein dürfte, beschreibt er doch die Benutzung von Git im Vergleich zu Subversion.
Schlüsselwörter: git, idisk, mac, versionskontrolle
Auch abrufbar als: Atom
Schlüsselwörter
- berlin (2)
- blog (5)
- browser (2)
- cocoaheads (5)
- dropbox (1)
- git (7)
- idisk (1)
- iphone (28)
- javascript (2)
- kurztip (4)
- linktips (17)
- mac (9)
- macruby (1)
- objective-c (8)
- ortung (1)
- programmierung (22)
- rails (1)
- railsconf (7)
- ruby (6)
- ruby on rails (7)
- schnipsel (14)
- server (2)
- spiele (1)
- statistiken (3)
- stuttgart (3)
- testen (4)
- tidy (1)
- versionskontrolle (5)
- wwdc (1)
- xcode (9)
- xml (1)
