Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
194 lines (149 sloc) 6.69 KB

PROG2 Lab Repository

Dieses Repository wird verwendet um die Praktikumsaufgaben in PROG2 auszuteilen und abzugeben.

Jedes Praktikum wird in einem eigenen Unterverzeichnis angelegt, in welchem die Anleitung und benötigten Dateien enthalten sind:

Wie im ersten Praktikum (Tooling) erläutert, arbeiten Sie mit einem persönlichen fork dieses Repositories in Ihrer eigenen GitHub Organisation (mustepet/PROG2-lab-ITxxx) und erledigen die Aufgaben in einem lokalen clone auf Ihrem Rechner.

Für die nachfolgenden Erläuterungen und die Praktika wird folgende Namensgebung für die repositories (remotes) verwendet:

Table 1. Repositories
Name URL Verwendung

upstream

git@github.zhaw.ch:PROG2/PROG2-lab-ITxxx.git

Das gemeinsame (upstream) Repository Ihrer Klasse

origin

git@github.zhaw.ch:mustepet/PROG2-lab-ITxxx.git

Ihr persönlicher public fork auf Github

local

~/PROG2_WORKDIR/PROG2-lab-ITxxx

Ihr lokaler clone im Arbeitsverzeichnis auf dem persönlichen Rechner

Wobei mustepet für ihren ZHAW Benutzernamen steht, ITxxx für Ihre Klassenbezeichnung (z.B. IT16aWIN, IT16bWIN oder IT16aZH) und PROG2_WORKDIR für ihr PROG2 Arbeitsverzeichnis auf dem lokalen Rechner.

1. Löschen nicht benötigter Branches

Beim Forken eines Repositories auf Github werden alle Branches kopiert. Im Klassenrepository (upstream) zum Beispiel wurde für jeden Studierenden ein Branch erstellt, der für das Abgeben der Praktikumsaufgaben benötigt wird (siehe unten). In ihrer persönlichen Kopie benötigen sie diese Studenten-Branches nicht. Spezifische Branches können im lokalen Repository mit dem Befehl git branch -d branchname gelöscht werden. Um alle Branches ausser 'master' zu löschen könnte der folgende Befehl verwendet werden.

Für bash basierte shells: (z.B. Linux, macOS, Windows git-bash, ...)
$ git branch | grep -v "master" | xargs git branch -D

Für Windows PowerShell:
$ git branch | %{ $_.Trim() } | ?{ $_ -ne 'master' } | %{ git branch -D $_ }

Um mehrere branches auszuschliessen können sie einfach den ` grep -v "…​" |` bzw. ?{ $_ -ne '…​' } | block mehrfach einfügen. Zum Beispiel:

$ git branch | grep -v "master" | grep -v "mustepet" | xargs git branch -D
Warning
Damit werden alle Branches, die nicht explizit ausgeschlossen werden gelöscht. Auch alle, die sie in den Übungen bisher erstellt haben.

Um die Branches auch auf ihrem Github Repository (origin) zu entfernen, müssen diese dort auch explizit gelöscht werden. Zum Beispiel mit dem Befehl git push -d origin/branchname

Eine einfache Variante, dies für alle lokal gelöschten Branches in einem Schritt durchzuführen, ist ihr lokales Repository mit hilfe der --mirror Option zu pushen.

$ git push origin --mirror
Warning
Dieser Befehl löscht alle remote Branches auf origin die lokal nicht existieren. Das könnte auch Branches betreffen, die jemand anders erstellt hat und welche Sie nicht lokal gefetched haben.
Deshalb sollte diser Befehl nur verwendet werden, wenn Sie sicher sind, dass ihr lokales Repository komplett ist (z.B. direkt nach einem Fork/Clone)

2. Aktualisieren ihres Repositories

Um ihr eigenes Repository mit neuem Inhalt dieses Klassen-Repositories zu aktualisieren verwenden sie den Integration-Manager Workflow:

# Wechseln Sie ins Arbeitsverzeichnis Ihres lokalen Clone-Repositories
cd ~/PROG2_WORKDIR/PROG2-lab-ITxxx

# Wir gehen davon aus, dass bereits ein remote 'origin' eingerichtet ist, das
# auf Ihr öffentliches Repository auf github verweist. -> evtl. überprüfen mit
git remote -v
# und gegebenenfalls hinzufügen
git remote add origin git@github.zhaw.ch:mustepet/PROG2-lab-ITxxx

# remote für 'upstream' Klassen-Repository einrichten, falls nicht  vorhanden.
git remote add upstream git@github.zhaw.ch:PROG2/PROG2-lab-ITxxx.git

# in den 'master' Branch des lokalen Clone-Repository wechseln
git checkout master

# Aktualisierungen aus Klassen-Repository herunterladen
git fetch upstream

# Lokalen master branch aktualisieren, evtl. merge Konflikte beheben
git merge upstream/master

# Aktualisierungen auf eigenes (Public-)Repository pushen
git push origin master

3. Ausführen des Praktikums und abgeben der Lösungen

3.1. Branch für Praktikum erzeugen

Erzeugen Sie für jedes Praktikum einen separaten Branch (z.B. Lab1, Lab2, …​):

# aktuellen Hauptbranch (master) auschecken
git checkout master

# neuen Branch für LabX (Lab1, Lab2, ...) erzeugen und auschecken
git branch Lab3
git checkout Lab3

3.2. Aufgaben lösen und in persönliches Repo committen

Lösen Sie die Aufgaben und commiten Sie regelmässig in den lokalen Lab branch. Schreiben Sie die Lösung von Textfragen direkt als Kommentar in den Code oder eine Text/PDF Datei Loesung.txt/pdf.

3.3. Abgeben der Lösung

Zum Abgeben pushen Sie den Lab Branch zuerst zu Ihrem persönlichen Repository (origin) auf Github (mustepet/PROG2-lab-ITxxx).

Danach senden Sie einen Pull-Request für den Lab-Branch Ihres persönlichen public repos (mustepet/PROG2-lab-ITxxx:Lab3) für Ihren persönlichen Branch im Klassen-Repository (PROG2/PROG2-lab-IT…​:mustepet).

Warning
Pull-Request in den 'master' Branch des Klassen-Repositories (upstream) werden grundsätzlich abgelehnt.
Note
Weitere commits in den Lab-Branch nach dem Erstellen des Pull-Requests werden automatisch zum Pull-Request hinzugefügt, solange dieser noch nicht vom Maintainer akzeptiert wurde.

Besprechen Sie anschliessend die Lösung mit dem Praktikumsbetreuer.

Nach Abschluss des Praktikums und Besprechung können sie den Lab-Branch auch zum ihrem master branch mergen und optional den Lab3 branch entfernen.

# Mergen des Lab-Branch nach master
# In diesem Fall verwenden wir sogar 'squash' um alle commits des Branches
# in einen einzelnen commit zu comprimieren. Nur ein commit für die finale
# Version des Praktikums
git checkout master
git merge --squash Lab3
git push origin master

# Da alle info jetzt in den master branch gemerged wurden, können sie optional
# den Lab branch löschen (remote und remote)
git push --delete origin Lab3 # auf remote origin entfernen
git branch -d Lab3            # im lokalen repository entfernen
You can’t perform that action at this time.