Der letzte Schrei bei der Versionskontrolle ist Git. Entwickelt von Linus Torvalds, dem Erfinder von Linux, ermöglicht es das Arbeiten auf eine viel flexiblere Art und Weise als SVN. Die Punkte die mich überzeugt haben sind:
Ein Artikel von Paul Lunow, erschienen 2009 auf Interaktionsdesigner.de.
Zuletzt überarbeitet am von
Denkst Du darüber nach zu gründen? Eine Familie oder ein Startup oder beides? In der zweiten Staffel meines Podcasts spreche ich mit tollen Menschen genau darüber. Lass Dich inspirieren und abonniere meinen Podcast: Auf Apple Podcast, Spotify und auf www.gründerväter.net.
Ich habe einen riesigen Haufen Projekte in einem riesigen Haufen Ordner. Jetzt liegt in einem Projektordner die Korrespondenz, angelieferte Daten und Informationen, sowie ein Ordner mit allen FTP Dateien die ich bearbeite, auf dem lokalen Server betrachte und bei bedarf komplett hochschiebe. Auf meinem Rechner soll jetzt ein Git Repository entstehen um Änderungen nachvollziehen zu können, die Daten zu sichern und im Notfall alte Versionen wiederherstellen zu können.
Ehrlich gesagt bin ich kein Freund des Terminals, es macht zwar Spaß wenn man es kann, aber bis dahin ist es mühsam. Ich habe auch keine große Lust XCode zu installieren um MacPorts nutzen zu können um alles zu installieren, deshalb bin ich sehr froh einen automatischen Installer für OS X 10.5 gefunden zu haben. Also: Git installieren wie ein ganz normales Programm! Funktioniert wunderbar. Um es zu testen muss man dann doch ins Terminal wechseln und den Befehl “git” eingeben. Darauf erhält man eine Liste der wichtigsten Befehle:
The most commonly used git commands are:
add Add file contents to the index
bisect Find by binary search the change that introduced a bug
branch List, create, or delete branches
checkout Checkout a branch or paths to the working tree
clone Clone a repository into a new directory
commit Record changes to the repository
diff Show changes between commits, commit and working tree, etc
fetch Download objects and refs from another repository
grep Print lines matching a pattern
init Create an empty git repository or reinitialize an existing one
log Show commit logs
merge Join two or more development histories together
mv Move or rename a file, a directory, or a symlink
pull Fetch from and merge with another repository or a local branch
push Update remote refs along with associated objects
rebase Forward-port local commits to the updated upstream head
reset Reset current HEAD to the specified state
rm Remove files from the working tree and from the index
show Show various types of objects
status Show the working tree status
tag Create, list, delete or verify a tag object signed with GPG
See 'git help COMMAND' for more information on a specific command.
Dieser Befehl git help COMMAND ist ganz praktisch. Navigieren lässt sich mit den Pfeiltasten, zurück zur Eingabe gelangt man mit [q].
Damit Git einen Namen und Benutzer hat, macht es Sinn sich dem System zu erkennen zu geben. Das passiert im Terminal mit Hilfe von
git config --global user.name "Mein Name"
git config --global user.email email@adresse.hier
Für ein Projekt erstellt man jetzt ein Repository. Um nichts kaputt zu machen erstmal mit einem Testprojekt. Meins liegt in /Projekte/Server/Git. In diesen Ordner muss mit dem Befehl cd im Terminal gewechselt werden:
cd /Projekte/Server/Git
Wenn das geklappt hat (überprüfen mit dem Befehl ls - der zeigt alle Dateien die der Ordner beinhaltet), kommt der große Moment: Git wird initialisiert!
git init
Wie Sie sehen, sehen Sie nichts. Aber das trügt! Es wurde ein versteckter Ordner angelegt. Um die Inhalte anzusehen wird wieder in den Finder gewechselt, der entsprechende (leere) Ordner ausgewählt und mit der Tastenkombination [cmd] + [umschalt] + [g] der Dialog zum Ordner öffnen ausgewählt. Hier wird “.git” eingetragen, mit [enter] bestätigt und schon kann man sich die verteckten Inhalte ansehen.
Um Dateien von Git verwalten zu lassen müssen sie als erstes in Git bekannt gemacht werden. Das ist der sogenannte “Index”. Dateien fügt man diesem Index mit dem Befehl git add . hinzu. Der Punkt gibt an das alle Dateien in dem betreffenden Ordner hinzugefügt werden sollen. Man befindet sich also im Terminal, immer noch im Projektordner, und fügt alle Dateien dem Index hinzu:
git add .
Als nächstes wird der Index ins Repository geladen. Das passiert über den Befehl commit.
git commit
Dieser Befehl öffnet einen Texteditor in dem man seinen Commit kurz beschreiben sollte (was ist passiert, was wurde geändert, usw.). Das geschieht über den Texteditor Vi. Für ungeübte “etwas” gewöhnungsbedürftig, aber so funktionierts:
Im Repository ist jetzt also eine Kopie vom gesamten Projekt gespeichert. Jetzt beginnt der Arbeitstag und man macht großartige Dinge. Wenn man das Gefühl hat den aktuellen Zwischenstand speichern zu wollen, wechselt man wieder ins Terminal, in den entsprechenden Ordner und “commited” die gemachten Änderungen.
git commit -a
Das-a am Ende fügt alle Dateien automatisch dem Index hinzu und publiziert die Änderungen. Noch schneller geht es mit der Kombination aus -a und -m. Dem Parameter -m folgt eine in Anführungszeichen gesetzte Nachricht für den Commit.
git commit -a -m "Nachricht über die Änderungen"
Aber Vorsicht: Mit diesem Befehl werden nur die Änderungen hinzugefügt, nicht aber neu angelegte Dateien!
Zu jedem Zeitpunkt kann man sich über git log den Status des Repositorys ansehen. Das listet alle Commits auf. Um genau zu sehen was sich geändert hat, wird der Befehl mit dem Parameter -p erweitert:
git log -p
An den Plus- und Minuszeichen kann man jetzt erkennen welche Zeilen geändert und welche hinzugefügt wurden. Über [q] verlässt man den Quelltextmodus. Und jetzt wird es richtig spannend. Wenn eine Änderung nicht gelappt hat und die letzte Version wiederhergestellt werden soll, dann passiert das mit checkout.
git checkout master^
master gibt den sog. “Branch” / Ast an aus dem exportiert werden soll, “master” ist der Standardast der automatisch angelegt wird. Das Dach ^ gibt an das die letzte Version wiederhergestellt wird. Zwei Dächer (^^) zeigen dann auf die vorletzte usw. Wird dieser Befehl ausgeführt werden alle Dateien im Ordner durch jene aus dem Repository ersetzt. Um wieder die aktuellste Version zu erhalten führt man den gleichen Befehl aus, allerdings ohne das Dach.
Vielleicht klingt es für dein einen oder anderen nicht besonders Revolutionär und ehr unpraktisch mit dem Terminal usw., ich empfehle aber dringend sich damit auseinander zu setzen! Die hier vorgestellten Grundlagen sind nur die Spitze des Eisbergs, Git bietet unglaublich viele Möglichkeiten, insbesondere bei der Zusammenarbeit mit anderen Programmierern. Es lassen sich verschiedene Versionen und Zweige definieren und richtig mächtig wird es wenn auf dem Server ein eigenes Repository läuft, als Backup und zur direkten Veröffentlichung. Es lassen sich auch verschiedene Hooks einbauen, kleine Scripte die z.B. ein Copyright in die Datei einfügen oder Bedingungen prüfen, beim einchecken und auschecken uvm.
GitHub hat ein großartiges Programm veröffentlicht um die Repositories auf dem eigenen Computer und jene bei GitHub zu verwalten: GitHub for Mac. Aufjedenfall einen Blick wert.