Ü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/WS1920_Tools/GIT/uebung.git enthalten.

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

Aufgabe 3: Änderungen machen und Originalzustand wiederherstellen

Mache ein paar Änderungen an den Dateien des Projekts, oder lösche eine Datei.

Benutze git status und git diff, um zu überprüfen, ob die Dateien noch in ihrem ursprünglichen Zustand sind oder nicht.

Beobachte, wie die Ausgabe von git diff sich verhält, je nach dem, welche Art von Änderung es gibt (fehlende Zeilen, neu hinzugekommene Zeilen, geänderte Wörter).

Benutze git checkout -p oder git checkout -- <Dateiname> um die ursprüngliche Version einer Datei wiederherzustellen, bzw. eine gelöschte Datei wiederherzustellen.

Aufgabe 4: Experimente machen

Erstelle neue Branches, die zu Beginn auf die neueste Version des Projekts verweisen.

Mache in jedem Branch ein oder mehrere neue Commits, in denen das Verhalten der fiktiven Skripte geändert ist. (Gib jeweils sinnvolle Commit-Messages an)

Beispiele für mögliche Änderungen:

Wechsle zwischen den Branches, um jeweils die ursprüngliche Version oder eine der neuen Versionen wiederherzustellen.

Versuche, mit git merge mindestens zwei der neuen Varianten in die ursprüngliche Version zu übernehmen.

Beobachte, ob es einen “echten” Merge-Commit gibt (mit mehr als einem Vorgänger), oder nur einen “fast forward”. Versuche zu verstehen, warum.

Falls es einen Merge-Konflikt gibt, versuche zu verstehen, warum. Versuche, den Konflikt zu lösen.

Nachdem ein Merge erfolgreich war, lösche den Branch, in dem die neue Version entstanden ist.

Lösche einen Branch mit einem anderen “Experiment”, das nicht in die “Hauptversion” übernommen werden soll.