Informatik/Mathematik / Software Engineering

Ziel: Kennenlernen der Zusammenarbeit im Team mit Hilfe von Git an einem gemeinsamen Repository auf GitHub

Praktikumsaufgaben Teil 3 - Zusammenarbeit 1

Für die Bearbeitung der Aufgaben bilden Sie bitte Teams aus drei Personen. Entscheiden Sie, wer aus Ihrem Team der Verantwortliche für das Git-Repository ist.

Hinweise für ein nicht an der HTW in Präsenz stattfindendes Praktikum
  • Bilden Sie mit Ihren Kommilitonen Teams aus 2 bis 3 Personen.

  • Sind Sie nur zu zweit, teilen Sie sich in die Aufgaben für Person C rein.

  • Es empfiehlt sich für eine geeignete Kommunikation (Video-, Sprach- oder Textchat) in Ihrem Team zu sorgen. Einige Aufgaben sind so ausgelegt, dass Sie erst auf das Bearbeiten der anderen Teammitglieder warten oder sich absprechen müssen.

Rollen im Team:
  • Person A …​ Mitglied im Team, Verantwortliche des Git-Repositories

  • Person B, C …​ Mitglied im Team

Zusammenspiel von Git, GitHub und AsciiDoc im Praktikum
Abbildung 1. Zusammenarbeit im Team mit Git
Hinweise zum Praktikum in den Windows-Laboren

Aufgrund der nicht gespeicherten Nutzer-Profile in den Windows-Laboren, sind zu jedem Praktikumsbeginn folgende Schritte durchzuführen:

Schritte zur Vorbereitung des Praktikums
  1. Git-Konfiguration C:\Users\<username>\.gitconfig wiederherstellen oder anpassen:

    per Editor in der .gitconfig
    [user]
    	name = Vorname Nachname
    	email = s00000@htw-dresden.de
    [safe]
        directory = *
    [http]
    	proxy = http://www-cache.htw-dresden.de:3128
    oder per PowerShell und Git-Kommandos
    > git config --global user.name "Vorname Nachname"
    > git config --global user.email s00000@informatik.htw-dresden.de
    > git config --global --add safe.directory *
    > git config --global http.proxy http://www-cache.htw-dresden.de:3128
  2. Visual Studio Code: Anpassen der AsciiDoc-Einstellungen:

    • Asciidoc > Preview: Use Editor Style: (deaktiviert)

    • Asciidoc > Extensions: Enable Kroki: (aktiviert)

  3. GitHub Login mit gespeichertem oder neuem Personal Access Token über die PowerShell bekanntgeben:

    Repository vorhanden
    > U:
    > cd path/to/repository/<repo-name>/
    > git pull
    Authentifizierung ...
    Repository nicht vorhanden (Home-/SAMBA-Laufwerk)
    > U:
    > cd path/to/repository/
    > git clone https://github.com/.../<repo-name>
    Authentifizierung ...
    Repository nicht vorhanden (TEMP-Laufwerk)
    > T:
    > git clone https://github.com/.../<repo-name>
    Authentifizierung ...


1. Einrichtung des Teams

Aufgabe 1.1 - Repository erstellen

Person A

Erstellen Sie in Ihrem GitHub-Account ein neues privates Repository htwd-se-example-teamproject mit folgenden Einstellungen:

  • Repository name: htwd-se-example-teamproject

  • Description: Beispielteamprojekt für die Praktikumsaufgaben zum Thema Git und AsciiDoc

  • Initialize this repository with a README: Ja

Aufgabe 1.2 - Mitglieder hinzufügen

Person A

Fügen Sie Ihrem Repository htwd-se-example-teamproject über die Einstellungen Settings  Manage access  Collaborators  Invite a collaborator ihre Teammitglieder über den Account-Namen oder die E-Mail hinzu.

Alle Mitlgieder haben Schreibrechte und können gleichberechtigt Änderungen am Repository vornehmen. Siehe auch Permission levels for a user account repository.
Person B, C

Schauen Sie in Ihr Mail-Postfach und nehmen Sie die Einladung zum htwd-se-example-teamproject an. Öffnen Sie anschließend das Team-Repository auf GitHub von Person A.

Damit der Einladungslink funktioniert, müssen Sie im Webbrowser schon bei GitHub angemeldet sein.

Aufgabe 1.3 - lokale Git-Konfiguration prüfen

Person A, B, C

Prüfen Sie mit git config --list Ihre lokale Git-Konfiguration, ob Ihr Name und Ihre E-Mail korrekt gesetzt sind. Sollte dies nicht der Fall sein, passen Sie sie laut Teil 1: Aufgabe 2.1 - Konfiguration an.

Aufgabe 1.4 - Repository Clonen

Person A, B, C

Clonen Sie Ihr gemeinsames Repository htwd-se-example-teamproject von Person A mit Ihrem jeweiligen GitHub Account an einen geeigneten Platz als lokalen Workspace auf ihren Rechner.


2. Bearbeiten des Projektes

Beim Bearbeiten Ihres Projektes im Team kann es an verschiedenen Stellen zu Konflikten kommen. Dies betrifft unterschiedliche Versionsstände Ihrer Teammitglieder gegenüber dem entfernten Repository auf GitHub und Ihres lokalen Repositories. Die Konflikte bzw. Unterschiede lassen sich entweder automatisch zusammenführen (merge) oder erfordern ein manuelles Eingreifen.

Schritte zum Lösen eines push-Error Konfliktes
Abbildung 2. Schritte zum Lösen eines push-Error Konfliktes
Hinweis: push-Error Konflikte lösen

Beim Senden (push) der Änderungen des lokalen Repositories zum Remote-Repository kann es zu einem Konflikt bzw. Fehler kommen, wenn das Remote-Repository in der Zwischenzeit neuere Versionen (commits) erhalten hat.

In diesem Falle ist es notwendig sich die aktuell Version vom Remote-Repository über ein pull zu laden, was zwei Möglichkeiten eröffnet:

Änderung an unterschiedlicher Stelle
  1. Git kann Ihre lokalen Änderungen automatisch mit der neueren Version vom Remote-Repository zusammenführen (merge). Es wird automatisch ein neuer Commit vorbereitet (Message eingeben).

  2. Anschließend können Sie mit einem wiederholten push die neu zusammengeführte Version an das Remote-Repository senden.

Änderung an gleicher Stelle bzw. Überschneidung

Git kann Ihre lokalen Änderung nicht automatisch mit der neueren Version vom Remote-Repository zusammenführen (mergen). Die betreffenden Dateien beinhalten an den sich überschneidenden Zeilen beide Varianten. Oben die lokale und unten die entfernte Variante. Dies wird wie folgt markiert:

 <<<<<<< HEAD
 Änderung 1
 =======
 Änderung 2
 >>>>>>> feb62f7c8cb4201e4f7e2aede0b81c356c1cd31e
  1. Lösen sie den Konflikt manuell, besprechen Sie sich hierzu ggf. im Team, durch ein Ersetzen bzw. Vereinen der Änderungen in den betreffenden Dateien. Entfernen Sie die durch Git hinzugefügten Markierung.

    Alternativ entscheiden Sie sich für eine von beiden Versionen und ersetzen die lokale Version mit beiden Änderungen entweder mit Ihrer lokalen oder der entfernten Variante:

    % git checkout --ours <file_name> (1)
    % git checkout --theirs <file_name> (2)
    1 …​ Nimmt Ihre lokale Version
    2 …​ Nimmt die Version vom remote-Repository
  2. Nehmen Sie Ihre neu bearbeiteten Änderungen (add und commit) in Ihr lokales Repository auf. Anschließend können Sie mit einem wiederholten push die neu zusammengeführte Version an das Remote-Repository senden.

Hinweis: pull-Error Konflikte lösen

Sie haben in Ihrem lokalen Repository noch nicht versionierte oder noch im INDEX vorgemerkte Änderungen, welche auf einer älteren Version als das Remote-Repository basieren.

Variante 1 - lokale nicht versionierte Änderung erst in das Repository aufnehmen
  1. Nehmen Sie Ihre lokale Änderung (add und commit) als Version in Ihr Repository auf.

  2. Laden Sie sich mit pull die aktuelle Version vom Remote-Repository.

  3. Git versucht den Konflikt automatisch zu lösen bzw. müssen Sie Ihn manuell auflösen (merge).

  4. Nehmen Sie Ihre neu bearbeiteten Änderungen (add und commit) in Ihr lokales Repository auf. Anschließend können Sie mit push die neu zusammengeführte Version an das Remote-Repository senden.

Variante 2 - lokale nicht versionierte Änderung verwerfen
  1. Mit git checkout . werden alle Änderungen im WORKSPACE gegenüber Ihrer letzten lokalen Version verworfen.

  2. Anschließend können Sie mit pull die aktuelle Version des Remote-Repositories laden.

Variante 3 - lokale nicht versionierte und vorgemerkte Änderung verwerfen
  1. Mit git reset --hard werden alle Änderungen im INDEX und WORKSPACE gegenüber Ihrer letzten lokalen Version verworfen.

  2. Anschließend können Sie mit pull die aktuelle Version des Remote-Repositories laden.

Weitere Varianten
  • Mit stash können Sie lokale noch nicht versionierte Änderungen temporär Zwischenspeichern und Ihren lokalen Stand auf die letzte Version Ihres lokalen Repositories zurücksetzen.

Aufgabe 2.1 - vorgegebene Reihenfolge

Person A
  1. Erstellen Sie im lokalen Workspaces Ihres htwd-se-example-teamproject Repositories ein Verzeichnis docs und legen Sie in diesem eine neue Datei Teamdokumentation.adoc mit folgendem Inhalt in Visual Studio Code an:

    Teamdokumentation.adoc
    = Teamdokumentation
    Vorname Nachname <email>
    0.1, 01.09.2019
    :toc:
    :toc-title: Inhaltsverzeichnis
    // Platzhalter für weitere Dokumenten-Attribute
    
    == Einführung
    Dieses Dokument dient im Praktikum als Spielwiese für das Kennenlernen und praktische Üben von AsciiDoc und Teamarbeit mit Git.
  2. Speichern Sie und nehmen Sie Ihre Änderungen als neue Version in Ihr lokales Git-Repository und Ihr Team-Repository auf GitHub auf.

Person B
  1. Aktualisieren Sie mit …​  Pull Ihr lokales Repository mit dem Stand von entfernten Repository auf GitHub.

  2. Legen Sie in Ihrem Repository die neue Datei Teammitglieder.adoc im Verzeichnis docs mit folgendem Inhalt in Visual Studio Code an:

    Teammitglieder.adoc
    == Teammitglieder
  3. Speichern Sie und nehmen Sie Ihre Änderungen als neue Version in Ihr lokales Git-Repository und das Team-Repository auf GitHub auf.

Person C
  1. Aktualisieren Sie mit …​  Pull Ihr lokales Repository mit dem Stand von entfernten Repository auf GitHub.

  2. Legen Sie in Ihrem Repository die neue Datei Software.adoc im Verzeichnis docs mit folgendem Inhalt in Visual Studio Code an:

    Software.adoc
    == Eingesetzte Software
  3. Speichern Sie und nehmen Sie Ihre Änderungen als neue Version in Ihr lokales Git-Repository und das Team-Repository auf GitHub auf.

Person A, B, C

Aktualisieren (git pull) Sie alle im Team Ihr lokales Repository, damit Sie alle den gleichen lokalen Versionsstand wie Ihr gemeinsames Team-Repository auf GitHub haben.

Aktuelle Projektstruktur:
htwd-se-example-teamproject
├── docs
│   ├── Software.adoc
│   ├── Teamdokumentation.adoc
│   └── Teammitglieder.adoc
└── README.md

Aufgabe 2.2 - freie Teamarbeit

Bearbeiten Sie im Team die folgenden Aufgaben und nehmen Sie die gemachten Änderungen jeweils in Ihr lokales und Ihr entferntes Teamrepository auf GitHub auf. Es ist keine bestimmt Reihenfolge vorgegeben, nur was wer tun soll. Diskutieren Sie Ihr Vorgehen und auftretende Problemen. Probieren Sie etwas und versuchen Sie aufgetretene merge-Konflikte zu lösen.

Mehrere Autoren werden in eine Zeile getrennt mit ; + Leerzeichen geschrieben. Besteht ein Autorenname aus mehr als drei Teilen, müssen die Vor- und Nachnamen mit _ jeweils zu einer Gruppe zusammengefasst werden.
Aufgaben - Person A
  • Binden Sie in der Datei Teamdokumentation.adoc an geeigneter Stelle die Dateien Teammitglieder.adoc und Software.adoc über includes ein.

  • Ergänzen Sie in der Datei Teamdokumentation.adoc im Dokumentenkopf Ihren Namen und Ihre E-Mail.

  • Passen Sie in der Datei README.md den Titel an und fügen Sie eine kurze Beschreibung für die Erzeugung des HTML-Dokumentes hinzu.

Aufgaben - Person B
  • Legen Sie in der Datei Teammitglieder.adoc eine Tabelle mit den Namen und der Rolle der Teammitglieder an.

  • Legen Sie eine Datei .gitignore an, um HTML- und PDF-Datei vom Repository auszuschließen.

  • Ergänzen Sie in der Datei Teamdokumentation.adoc im Dokumentenkopf Ihren Namen und Ihre E-Mail.

Aufgaben - Person C
  • Legen Sie in der Datei Software.adoc eine Auflistung der für das Teamprojekt eingesetzten Software mit Links zu den entsprechenden Webseiten an.

  • Ergänzen Sie in der Datei Teamdokumentation.adoc im Dokumentenkopf Ihren Namen und Ihre E-Mail.

Endaufgabe - Person A, B, C
  • Generieren Sie mit der Asciidoctor-Erweiterung in Visual Studio Code das finale Teamdokumentation.adoc HTML-Document.

  • Schauen Sie sich das fertige HTML-Document im Webbrowser und den Projektverlauf (commit history) in Ihrem GitHub Repository an.


Ausblick

Eine weitere Möglichkeiten für die Zusammenarbeit über GitHub sind Pull requests, welche wir uns im nächsten Semester (Teil 8 - Zusammenarbeit 3) anschauen.

Pull requests

Anfrage mit Diskussion für das Mitarbeiten oder Aufnehmen (merge) einer ausgelagerten Bearbeitungen (extra Branch oder Fork) in den Haupt-Branch.

Seitenübersicht