Kooperation über GitHub

Einloggen auf Github mit einem privaten Account, bei mit z.B. https://github.com/jbusse2/. Dieser User hat sich zuvor einen kostenlosen Account angelegt und besitzt keine besondere Privilegien.

In GitHub (in einem Firefox-Fenster): Anlegen eines neuen Repositories, hier github-cooptest-2020-11-19. Dieses Repository ist public, kann also von jedem ohne Passwort gelesen und repliziert werden.

Dieses Verzeichnis auf den lokalen Rechner klonen:

cd
mkdir githubtest
cd githubtest
git clone https://github.com/jbusse2/github-cooptest-2020-11-19
cd github-cooptest-2020-11-19

In Github (in einem Firefox-Fenster) editieren wir die Datei README.md. Wir fügen z.B. folgenden Text hinzu: Frage: Wie kann man kollabrativ mit GitHub ein Jupyterbook editieren? Hier der Versuch eines einfachen Setups für GitHub-Neulinge.

Die README.md auf GitHUb ist nun aktueller als die Version auf unserem Rechner. Mit git pull holen wir uns die neueste Version auf unseren Rechner:

cd github-cooptest-2020-11-19
git pull

Ausgabe:

(base) jb@jb-ThinkPad-X250:~/a/l/LA/dsci/githubtest/github-cooptest-2020-11-19$ git pull
Aktualisiere d88e705..0ab1cb9
Fast-forward
README.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

Wir editieren lokal die Datei README.md, fügen z.B. den Text hinzu: Kernfrage: Wie löst man konkurrierende Edits auf?

Unsere lokale Fassung ist nun neuer. So laden wir sie auf GitHub hoch:

git add *
git commit -m"Kernfrage in die README eingefügt"

Ausgabe:

[main a940841] Kernfrage in die README eingefügt
1 file changed, 2 insertions(+)

und pushen:

git push

Ausgabe:

Username for 'https://github.com': jbusse2
Password for 'https://jbusse2@github.com': XXXXXXXXXXXXX
Zähle Objekte: 3, Fertig.
Delta compression using up to 4 threads.
Komprimiere Objekte: 100% (3/3), Fertig.
Schreibe Objekte: 100% (3/3), 368 bytes | 0 bytes/s, Fertig.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/jbusse2/github-cooptest-2020-11-19
0ab1cb9..a940841  main -> main

Editierkonflikt erzeugen und beheben

Wir erzeugen nun einen Editier-Konflikt.

  • In Github (in einem Firefox-Fenster) editieren wir die Datei README.md., fügen z.B. folgenden Text hinzu:

    • Diese Zeile wurde über Firefox direkt in Github hinzugefügt.

    • Speichern mit dem grünen Button “Commit changes”.

  • Und wir editieren lokal die Datei README.md, fügen z.B. den Text hinzu:

    • Diese Zeile wurde lokal hinzugefügt

    • Speichern mit dem Speichern-Kommando des Editors.

Welcher Unterschied besteht nun?

  • In GitHub (in einem Firefox-Fenster) wurde die Datei nicht nur gespeichert, sondern commited

  • lokal haben wir die Datei nur gespeichtert, aber noch kein git add und git commit abgesetzt.

Test: Was passiert, wenn man jetzt ein pull macht?

git pull

Ausgabe:

Aktualisiere c6b413e..f43b9b7
error: Your local changes to the following files would be overwritten by merge:
    README.md
Please, commit your changes or stash them before you can merge.
Aborting

Ok, wir folgen der Empfehlung und commiten unsere lokalen Änderungen:

git add *
git commit -m"Editierkonflikt erzeugt"

Ausgabe:

[main 9da3e15] Editierkonflikt erzeugt
 1 file changed, 3 insertions(+), 1 deletion(-)
(base) jb@jb-ThinkPad-X250:~/a/l/LA/dsci/githubtest/github-cooptest-2020-11-19$ 

Ok, das Commit geht. Was passiert jetzt bei einem pull?

git pull

Ausgabe:

automatischer Merge von README.md
KONFLIKT (Inhalt): Merge-Konflikt in README.md
Automatischer Merge fehlgeschlagen; beheben Sie die Konflikte und committen Sie dann das Ergebnis.
git mergetool --tool=meld

Dann wieder das übliche Procedere fürs hochladen:

git add *
git commit -,"Konflikt manuell aufgelöst"
git push

Ausgabe:

Username for 'https://github.com': jbusse2
Password for 'https://jbusse2@github.com': 
Zähle Objekte: 7, Fertig.
Delta compression using up to 4 threads.
Komprimiere Objekte: 100% (7/7), Fertig.
Schreibe Objekte: 100% (7/7), 1.05 KiB | 0 bytes/s, Fertig.
Total 7 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 1 local object.
To https://github.com/jbusse2/github-cooptest-2020-11-19
   f43b9b7..96bc78a  main -> main

In GitHub (in einem Firefox-Fenster) machen wir ein Strg-r (für reload) uns sehen die manuell zusammeneführte Datei: voila!

AUFGABE 1: Wiederholen Sie diese Schritte ohne lokales add/commit

  • einmal im Firefox direkt die README-Datei editieren und die Änderung committen

  • auch lokal die README-Datei etwas anders (!) editieren, speichern

  • dann lokal ein git add und git commit!

  • dann ein git pull: Was passiert?

AUFGABE 2: Wiederholen Sie diese Schritte ohne lokales add/commit

  • wieder im Firefox direkt die README-Datei editieren und die Änderung committen

  • auch lokal README-Datei etwas anders editieren, speichern

  • aber jetzt kein git add und git commit, sondern gleich ein git pull: Was passiert?

Eine weitere Person zum Collaborator machen

In GitHub (in einem Firefox-Fenster) eingeloggt als jbusse:

  • Settings > Manage Access > invite a collaborator

  • suche nach hawla-buj … einladen … “hawla-buj has been added as a collaborator on the repository. “

Zweite Person nimmt Einladung an:

  • ausloggen von jbusse2,

  • einloggen als hawla-buj

  • hawla-buj ruft mail ab > view invitation > accept invitation

Wichtig: “view invitation” klappt nur, wenn man schon in GitHub eingeloggt ist.

Gemeinsam am Projekt arbeiten

Unser gemeinsames Repository:

Wichtig:

  • Wir arbeiten niemals mit verschiedenen Leuten an der gleichen Datei. Zwar gibt es ein git mergetool, aber das ist fehleranfällig, und bei mehr als 2 Personen wird es völlig chaotisch.

  • Statt dessen legt sich jeder Nutzer ein eigenes Unterverzeichnis an, und arbeitet ausschließlich da drin. Auch git add wird ausschließlich im eigenen Unterverzechnis ausgeführt.

  • In den Ordner oder in Dateien anderer Personen schreiben ist tabu!

  • Dateinamen-Konvention: Alle Dateien, die man selbst anlegt - auch die im eigenen Unterverzeichnis - beginnen mit dem eigenen HAW-Accountkürzel, also z.B. s-jbusse-Projektbericht.md oder s-jbusse-Aufgabensammlung.ipynb. (Wir brauchen später für Jupyterbook eine Eindeutigkeit aller Dateinamen im Projekt).

Anfangen:

  • obiges GitHub-Repository clonen

  • eigenes Unterverzeichnis anlegen

  • gehe zur Seite http://jbusse.de/dsci-lab/dsci-projekt(DE).html; dort oben rechts Icon mit Download-Pfeil > .md Datei öffnen und in das eigene Unteverzeichnis speichern

  • Datei gemäß Dateinamen-Konvention lokal umbenennen

  • Datei ein klein wenig editieren

und dann ein push!