Git & SourceTree
#Code

Git & SourceTree

Zusammenarbeit in einem Team ist schwierig. Es gibt (auch innerdeutsche) Sprachbarrieren, Gewohnheiten und Differenzen in Arbeitsweisen.

Neben zwischenmenschlichen Hürden gibt es jedoch auch technische Barrieren. Wird Live auf dem Kundenserver gearbeitet, so besteht a) die Möglichkeit, dass die Änderungen eines anderen überschrieben werden und b) wird live gearbeitet. Das macht unter anderem die Arbeiten am bestehenden System schwierig, da ein normaler Besucher keine Fehlermeldung oder andere Abnormitäten sehen möchte.

Git als Versionierungssystem ist hier eine Methode zur Kollaboration, die die Dateien lokal hält und (nach Wunsch) per hook auch automatisch deployen kann. Mit einem Versionierungssystem kann auch ohne Angst gearbeitet werden, da ein solches alle Veränderungen speichert. Im Zweifelsfall kann man also immer zum letzten commit zurück. Git ist dabei mehr als nur ein Tool, das die Arbeit erleichtert. Git ist ein kompletter Workflow.

git language

Es sind nun einige Worte aus dem git System gefallen, deren Bedeutung nicht allen klar sein könnte. Es folgt nun eine Auflistung der wichtigsten Begriffe inkl. einer kurzen Beschreibung:

commit: Eine Art "Sicherungspunkt", typischerweise "commited" man seine Arbeit, sobald eine Aufgabe / ein Feature vollendet ist. Anhand dieser commits lässt sich die Geschichte eines Projektes sehen.

branch: Auf deutsch "Arbeitsbaum". In einem Projekt lassen sich verschiedene branches bearbeiten, beispielsweise für verschiedene Versionen einer Software oder zur Unterscheidung des "live" Status und des "development" Status einer Webseite.

clone: Das "Klonen" eines Projektes. Das Klonen wird benötigt, um die Daten auf dem lokalen Rechner aufzusetzen. Das Klonen wird nur zur Erstbeschaffung der Daten benötigt.

pull: Das Herunterladen neuer Daten vom Server. Im Gegensatz zum Klonen kann das Pullen nur in schon bestehenden Projekten ausgeführt werden.

push: Das Hochladen lokaler Commits auf den Server.

merge: Das kombinieren zweier Branches (Arbeitsbäume).

git basics

Wir werden nun einen kompletten Arbeitsverlauf durchgehen, von der Beschaffung der Daten bis hin zu dem Einbringen der Änderung in das System.

git clone 

 

git clone git@github.com:nimius/TYPO3.EXT.HTML5-Audio-Player.git

 

Nun liegen die Daten auf dem lokalen Rechner vor, mit diesen Daten kann nun gearbeitet werden.

git status

 

git status

 

Nach vollendeter Arbeit erscheinen hier die Veränderungen zum letzten Stand. Die Ausgabe sieht folgendermaßen aus:

 

git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# modified: .gitmodules
# new file: DOKUMENTE/2013/NIMIUS/impressJS
#
# Changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: chrome_test/js/main.js
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# DOKUMENTE/2013/NIMIUS/git_sourcetree.html
# Welcome to Draft.md
# css3.md
# grunt_files_aufsetzen.md
# sprit.numbers

 

Bearbeitete, neu erstellte und gelöschte Dateien werden hier aufgelistet.

git add

 

git add DOKUMENTE/2013/NIMIUS/git_sourcetree.html

 

Per git add lassen sich Änderungen an Dateien in das Versionierungssystem einfügen. Somit hat der Entwickler die Kontrolle, welche Dateien er in dem System haben möchte und welche nicht. Konfigurationsdateien für das lokale System oder Passwortdateien sind Beispielsweise Dateien, die nicht in einem Versionierungssystem auftauchen sollten.

Sollen dennoch alle Dateien hinzugefügt werden, so kann dies mit dem folgenden Kommando getan werden:

 

git add ./

 

./ steht dabei für das aktuelle Verzeichnis und alle Unterdateien

git commit

 

git commit -m "Added salt and pepper for better taste"

 

Mit einem Commit wird, wie oben erwähnt, ein Punkt in der Versionsgeschichte gemacht. Mit dem Argument -m lässt sich eine Commit-Nachricht hinzufügen. Bestenfalls fasst diese Nachricht die Veränderungen kurz zusammen.

Zu beachten ist hierbei, dass nur Veränderungen commited werden, die zuvor auch per "git add" hinzugefügt wurden

git push

 

git push

 

Der im vorigen Schritt erstellte Commit liegt nur auf dem lokalen Rechner vor. Mit einem push werden die Veränderungen zum Server hochgeladen, so dass alle anderen Entwickler diese auch zur Verfügung haben

SourceTree

Git im Terminal/Konsole ist manchmal schwer zu verstehen und etwas umständlich, daher veröffentlichte Atlassian (Der Herausgeber von Systemen wie JIRA und auch bitbucket) eine grafische Oberfläche für git: SourceTree

SourceTree ist sowohl für Windows als auch für Mac OS X erhältlich. Eine Linux-Version gibt es leider nicht.

SourceTree besticht durch eine einfache Benutzerführung, die auch dem unerfahrenen Nutzer die Benutzung eines Versionierungssystems ermöglicht.

In dem "Working copy" Menü werden die Änderungen seit dem letzten Commit aufgelistet. Mit einem Klick auf eine Datei erscheint die konkrete Änderung in der rechten Fensterhälfte. Rot unterlegte Zeilen stehen dabei für gelöschte Inhalte und grün hinterlegte für Hinzugefügte.

Die zweite Hauptansicht ist die "History". Hier werden alle Commits aufgeführt, inklusive einer übersichtlichen grafischen Darstellung der Arbeitsbäume. Wird oben ein Punkt in der Versionsgeschichte ausgewählt, erscheint unten die selbe Ansicht, die auch unter "working copy"  zu finden ist: Auf der linken Seite die geänderten Dateien und auf der rechten Seite Änderungen an der ausgewählten Datei.

Über ein großes Symbol in der Menüleiste ist die wichtige Commit-Funktion zu finden. Über den aufgeräumten Dialog lassen sich Dateien auswählen, die in einen Commit mit einbezogen werden sollen. So lassen sich partielle Commits sehr einfach realisieren.

Andere wichtige Funktionen, wie zum Beispiel das Pushen, das Pullen, Taggen oder Mergen sind über die Menüleiste zu erreichen.

Fazit

Git ist definitiv mehr als nur ein nützliches Werkzeug in dem Alltag eines Entwicklers. Mit Macht kommt jedoch auch eine Komplexität, die git für viele unerreichbar macht. SourceTree bietet, gerade für Einsteiger in die Versionierung mit git, ein gutes Werkzeug.

Für den gestandenen Konsolen-Liebhaber wird SourceTree jedoch nicht zu empfehlen sein, da der "direkte Weg" über die Konsole / das Terminal um einiges dynamischer ist.