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
undgit 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
undgit 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
undgit commit
, sondern gleich eingit 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
oders-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!