# Beispiel Git-Workflow --- ## SSH-Key generieren und im Git hinzufügen ### Linux & Mac-OS Generiere einen Key mit ```sh ssh-keygen -t ed25519 -C "you@mail.com" ``` Gib den Key in die Konsole aus mit ```sh cat ~/.ssh/id_ed25519.pub ``` Kopiere mit Strg+Shift+C oder Rechtklick den Key aus dem Terminal und fügen ihn im [Git](https://git.laurel.informatik.uni-freiburg.de/user/settings/keys) als SSH Key hinzu. ### Windows Generiere einen Key und kopiere ihn ```ps ssh-keygen.exe -t ed25519 -C "you@mail.com" cat ~/.ssh/id_ed25519.pub | clip ``` fügen dann den Key im [Git](https://git.laurel.informatik.uni-freiburg.de/user/settings/keys) als SSH Key hinzu. ### Mac Generiere einen Key mit ```sh ssh-keygen -t ed25519 -C "you@mail.com" pbcopy < ~/.ssh/id_ed25519.pub ``` fügen dann den Key im [Git](https://git.laurel.informatik.uni-freiburg.de/user/settings/keys) als SSH Key hinzu. --- ## Das Repository clonen Erstmal ist es wichtig wie man sich im Terminal überhaupt bewegt und umschaut. Wenn wir das Terminal starten, egal ob in Windows/Linux/Mac landen wir im Home-Verzeichnis often bezeichnet als `~`. Um den ersten Schritt zu gehen müssen wir erstmal wissen was wir hier überhaupt haben. Hierfür haben wir das Programm `ls`, welches den Inhalt in einem (ohne Argumente im aktuellen) Verzeichnis auflistet. Eine Beispielausgabe wäre: ```sh nils@linux ~> ls total 16 drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Desktop/ drwxr-xr-x 2 nils nils 4096 Oct 27 02:16 Downloads/ drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Pictures/ drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Videos/ ``` Nun können wir uns in die anderen Verzeichnisse bewegen mit `cd` (change directory). ```sh nils@linux ~> cd Downloads/ nils@linux ~/Downloads> ls total 0 -rw-r--r-- 1 nils nils 0 Oct 27 02:19 cat.png ``` mit `cd ..` können wir uns jetzt ein Verzeichnis wieder nach oben bewegen ```sh nils@linux ~/Downloads> cd .. nils@linux ~> ls total 16 drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Desktop/ drwxr-xr-x 2 nils nils 4096 Oct 27 02:19 Downloads/ drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Pictures/ drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Videos/ ``` nun clonen wir das Repository indem wir ins [Git](https://git.laurel.informatik.uni-freiburg.de/2021WS-EiP/) gehen, auf unser persönliches Repository gehen. Und oben bei **SSH** auf **Copy**/**Kopieren** gehen. Nun müssen wir einfach nur noch folgenden Befehl eingeben ```sh nils@linux ~> git clone ssh://git@git.laurel.informatik.uni-freiburg.de:2222/2021WS-EiP/np163.git Cloning into 'np163'... The authenticity of host '[git.laurel.informatik.uni-freiburg.de]:2222 ([132.230.166.132]:2222)' can't be established. ED25519 key fingerprint is SHA256:zR3d+3MewcoiAuwVidHYfWcsNjT/OVz5FR6IwIyTNCs. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '[git.laurel.informatik.uni-freiburg.de]:2222' (ED25519) to the list of known hosts. remote: Enumerating objects: 594, done. remote: Counting objects: 100% (594/594), done. remote: Compressing objects: 100% (573/573), done. remote: Total 594 (delta 336), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (594/594), 86.90 KiB | 2.63 MiB/s, done. Resolving deltas: 100% (336/336), done. ``` nun können wir mit `ls` nachschauen dass ein neuer Ordner erschienen ist, in meinem Fall **np163**. ```sh nils@linux ~> ls total 20 drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Desktop/ drwxr-xr-x 2 nils nils 4096 Oct 27 02:19 Downloads/ drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Pictures/ drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Videos/ drwxr-xr-x 17 nils nils 4096 Oct 27 02:24 np163/ ``` Nun können wir diesen Ordner in VSCode öffnen und haben einen Workspace um die Übungsaufgaben zu bearbeiten. --- Nun bewegen wir uns ins Git-Verzeichnis mit `cd np163`. Und führen unseren ersten Git-Command aus `git status` ```sh nils@linux ~/np163 (master)> git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean ``` wir sehen, dass aktuell noch nichts im Verzeichnis geändert wurde. Das ändern wir jetzt indem wir in VSCode eine `hello_world.py` erstellen. Und den `git status` wiederholen ```sh nils@linux ~/np163 (master)> git status On branch master Your branch is up to date with 'origin/master'. Untracked files: (use "git add <file>..." to include in what will be committed) hello_world.py nothing added to commit but untracked files present (use "git add" to track) ``` hier schlägt uns Git auch direkt schon vor `git add` zu verwenden um die neue Datei hinzuzufügen. ```sh nils@linux ~/np163 (master)> git add hello_world.py nils@linux ~/np163 (master)> git status On branch master Your branch is up to date with 'origin/master'. Changes to be committed: (use "git restore --staged <file>..." to unstage) new file: hello_world.py ``` mit `git add -A` können alle aktuelle Änderungen hinzugefügt werden. nun können wir die Datei in unser Git eintragen indem wir `git commit -m 'meine nachricht'` verwenden. ```sh nils@linux ~/np163 (master)> git commit -m 'created hello_world.py' [master 4191d5b] created hello_world.py 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 hello_world.py ``` und diese Änderung dann mit `git push` hochladen. ```sh nils@linux ~/np163 (master)> git push Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Delta compression using up to 16 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 285 bytes | 285.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To ssh://git.laurel.informatik.uni-freiburg.de:2222/2021WS-EiP/np163.git 06b6eb7..4191d5b master -> master ``` --- ## Git - VSCode Zunächst erstellen wir eine Datei mit dem Namen `hello_world.py` über die Verzeichnisverwaltung von VSCode. Wir sehen dass die neue Datei bereits grün angezeigt, weil es eine neue Datei im Git ist.  Nun wechsel wir die Ansicht von der Verzeichnisverwaltung zu Git ganz links außen.  Nun drücken wir bei unserer neu erstellten Datei auf das `+`. Diese wird dann als `Staged Changes` angezeigt.  Nun legen wir eine Nachricht fest welche die Änderungen representiert und beschreibt.  Nun drücken wir auf `Commit` und nun sind unsere Änderungen übernommen.  Nun können wir noch auf `Sync Changes` drücken um die Änderungen auch an den Git-Services **Gitea** zu schicken. Danach werden keine weiteren Dateien mehr im Git-Reiter angezeigt und online sehen wir dass unsere Änderungen hochgeladen wurden.   --- Für Anregung gerne eine kurze [Mail](mailto:nils@narl.io) schreiben.