Übungsszenario

In einem fiktiven Projekt werden Daten erzeugt und ausgewertet. Das Projekt besteht aus folgenden drei Dateien:

Zum Ausprobieren: Speichert man die drei Dateien im gleichen Verzeichnis, werden durch Aufruf von

$ bash generate_and_plot.sh

die fiktiven Daten erzeugt und eine grafische Darstellung in die Datei sine_wave.png geschrieben.

Die oben gezeigten Dateien waren die “alte Version” des Projekts.

Nach einiger Zeit wurde das fiktive Projekt weiterentwickelt und der Inhalt der Dateien ist jetzt dieser (“neue Version”):

Aufgabe 1: Vorbereitungen

Konfiguriere Git:

$ git config --global user.name <Vorname> <Nachname>
$ git config --global user.email <E-Mail-Adresse>

Diese beiden Angaben braucht Git, um einen Autor in die Commits einzutragen.

$ git config --global color.ui auto

Damit sieht die Ausgabe von Git übersichtlicher aus.

$ git config --global core.editor <Name des Editors>

Hiermit legt man fest, welcher Texteditor von Git gestartet wird, wenn eine Eingabe (z.B. Commitmessage) verlangt ist. Am einfachsten nimmt man gedit oder nano. Experten können natürlich auch vim oder emacs benutzen.

Die Einstellungen müssten in der Datei ~/.gitconfig gespeichert sein. Prüfe es mit cat o.ä. nach!

Aufgabe 2: Fremdes Repository klonen und betrachten

Das fiktive Projekt ist in einem Git-Repository unter der Adresse https://sus.ziti.uni-heidelberg.de/Lehre/WS1617_Tools/GIT/uebung.git enthalten.

Klone das Repository und benutze gitk, git log und git show, um es zu betrachten und die Entwicklungsgeschichte nachzuverfolgen.

Mache ein paar Änderungen an den Dateien des Projekts, oder lösche eine Datei, und benutze git status, git diff und git checkout (z.B. mit Option -p), um die Änderungen wieder rückgängig zu machen und um dich zu vergewissern, dass der ursprüngliche Zustand wiederhergestellt ist.

Aufgabe 3: Commits erzeugen

Stelle die Entwicklungsgeschichte des Projekts nach.

Lege ein neues, leeres Repository an und füge die “alten” Versionen der drei Dateien hinzu.

Im Verlauf der Entwicklung des fiktiven Projekts von der “alten” zur “neuen” Version wurden verschiedene Dinge verändert:

Erzeuge einzelne Commits, die jeweils genau ein neues “Feature” beinhalten.

Benutze git add und git reset (evtl. mit der Option -p), um den Inhalt des Index genau zu kontrollieren. Benutze git diff und git diff --cached, um zu prüfen, dass der Index genau die gewünschten Änderungen enthält.

Am Ende, nach einigen Commits, sollen die Dateien mit den “neuen” Versionen übereinstimmen und anhand der Commitmessages soll es möglich sein, nachzuvollziehen, welche Features durch welche Änderungen im Code bewirkt wurden.

Das Skript generate_and_plot.sh sollte nach jedem Commit fehlerfrei laufen und eine PNG-Grafik erzeugen.

In gitk betrachtet sollte das Repository also zu dem in Aufgabe 2 geklonten vergleichbar sein.

Aufgabe 4: Zusammenarbeiten

Bildet Zweier- oder Dreiergruppen.

Wählt das in Aufgabe 3 entstandene Repository eines Gruppenmitglieds aus. Die anderen Gruppenmitglieder legen sich einen eigenen Klon davon an.

Alle in der Gruppe machen nun unabhängig voneinander kleine Änderungen in den Skripten (z.B. Zahlenwerte, Farben oder Beschriftungen).

Synchronisiert die Repositories mit git fetch untereinander und versucht mit git merge eine Version zu erzeugen, die alle Änderungen enthält. Nutzt gitk --all um die Beziehungen zwischen den Repositories zu veranschaulichen.