Skip to content
Snippets Groups Projects
Verified Commit 4764dfb4 authored by Lars Frost's avatar Lars Frost
Browse files

Finish local sheet

parent 608719bf
No related branches found
No related tags found
No related merge requests found
......@@ -11,21 +11,21 @@
= Init
Open the downloaded project dir `greekify` in a terminal.
You should have a file `greekify.py` and `greekify_replace.py` in it.
Calling `git status` should give you an eror message telling you, that neither this nor any upper directory is a git repository.
Du kannst das Git-Repository immer aus allen Unterverzeichnissen ändern, git sucht automatisch in den höher liegenden Verzeichnissen nach Repositories.
Öffnet das Projekt `greekify` das ihr per Mail bekommen habt in einem Terminal.
In diesem sollten sich die Dateien `greekify.py`, `greekify_replace.py` und `test.txt` befinden.
Der Befehl `git status` zeigt grundsätzlich an, in welchem Zustand sich das Repository gerade befindet.
Aktuell sollte `git status` eine Fehlermeldung anzeigen, dass weder das aktuelle noch irgendein höher liegendes Verzeichnis ein Git-Repository ist.
```
fatal: not a git repository (or any parent up to mount point /)
```
Du kannst das Git-Repository immer aus allen Unterverzeichnissen ändern, git sucht automatisch in den höher liegenden Verzeichnissen nach Repositories.
#task[
Erstelle ein git-repository im aktuellen Verzeichnis mit `git init`.
]
Anschließend sollte sich ein `.git` Verzeichnis in dem `greekify` Verzeichnis befinden.
Die Ausgabe von `git log` zeigt dir nun das du auf dem aktuellen Branch (standardmäßig "main" genannt) keine Commits hast.
Die Ausgabe von `git log` zeigt dir nun, dass du auf dem aktuellen Branch (standardmäßig "main" genannt) keine Commits hast.
```
fatal: your current branch 'main' does not have any commits yet
......@@ -50,11 +50,10 @@ nothing added to commit but untracked files present (use "git add" to track)
```
= Add
Der nächste Schritt beim Bearbeiten ist das Tracken von Dateien.
Der nächste Schritt ist das Tracken von Dateien.
#task[
Tracke alle Dateien mit `git add greekify.py greekify_replace.py test.txt`.
Alternativ kannst du auch `git add .` verwenden um alle Dateien im aktuellen Verzeichnis (genannt `.`) hinzuzufügen.
Tracke die $3$ Dateien mit `git add`. Als Argument akzeptiert `git add` eine Liste von Dateien oder Verzeichnissen.
]
Du kannst mit `git status` wieder anzeigen, welchen Zustand die Dateien haben.
......@@ -65,18 +64,18 @@ Dabei sollte nun angezeigt werden, das die Programm- und Testdateien beim nächs
]
= Commit
Um die Änderung auch ins repository zu übernehmen, kannst du `git commit` verwenden.
Um die Änderung auch ins Repository zu übernehmen, kannst du `git commit` verwenden.
Dazu musst du zuerst 2 Konfigurationen setzen.
Zum einen solltest du zum Bearbeiten der Commit-Message einen Texteditor verwenden und musst Git dafür mitteilen,
welchen Editor du verwenden möchtest.
Zum anderen wird bei Commits der Autor gespeichert, dazu musst du Git mitteilen welche Informationen dafür verwendet werden sollen.
Zum anderen wird bei Commits der Autor gespeichert, dazu musst du Git mitteilen welcher Name und Kontaktdaten dafür verwendet werden sollen.
Konfigurationen werden mit dem Kommando `git config` geändert.
Mit der Flag `--global` setzt du sie global, ohne wird die Änderung nur für das lokale Repository geändert.
#footnote[Alternativ kannst du die Datei, in der die Konfiguration gespeichert ist, auch direkt bearbeiten. In unix-artigen Systemen befindet sich die globale config in `$HOME/.gitconfig` und die Repository-lokale config in `./.git/config`]
Mögliche Editoren:
- Nano (einfach gehalten, empfohlen für Einstiger, das `^` in der Befehlsübersicht steht für die `Strg`-Taste)\
- Nano (einfach gehalten, empfohlen für Einstiger; das `^` in der Befehlsübersicht steht für die `Strg`-Taste)\
`git config --global core.editor /bin/nano`
- Vim (Sehr interessanter Editor dessen Benutzung den Rahmen dieses Workshops weit sprengt)\
`git config --global core.editor /bin/vim`
......@@ -100,7 +99,7 @@ git config user.email "dein.name@rwth-aachen.de"
]
#task[
Commit die getrackten Änderung mit `git commit`. Dies sollte den zuvor konfigurierten Texteditor öffen, mit einer Übersicht.
Commit die getrackten Änderung mit `git commit`. Dies sollte den zuvor konfigurierten Texteditor öffen, mit einer Übersicht der geänderten Dateien.
Lies dir die generierten Kommentare dort in Ruhe durch.
Schreibe anschließend eine Commit-Message in die erste Zeile.
Trage erstmal irgendeine Message ein, wir kommen später dazu wie eine gute Commit-Message aussieht.
......@@ -177,17 +176,17 @@ Bei der Commit-Id genügen die ersten 7 Zeichen, im oberen Beispiel wäre der Be
Falls du das Programm zwischenzeitg ausführst und dabei ein `__PYCACHE__`-Verzeichnis entsteht, committe dieses nicht.
]
Der `git log` Befehl kann dir auch nur das log für ausgewählte Dateien anzeigen.
Der `git log` Befehl kann das Log auch auf ausgewählte Dateien beschränken.
Die Syntax dafür ist `git log -- Datei1 Datei2`.
#question[
Was sollte anschließend die Ausgabe von `git log -- greekify_replace.py` und `git log -- greekify.py` sein? Warum?
Was sollten `git log -- greekify_replace.py` und `git log -- greekify.py` jetzt anzeigen? Warum?
]
= .gitignore
Beim Ausführen des Programs sollte ein `__PYCACHE__`-Verzeichnis entstehen.
Dieses gehört wie alle Cache-Dateien und andere automatisch generierte Dateien nicht ins Git-Repository.
Um Git darüber zu informieren kannst du ein .gitignore Datei anlegen.
Beim Ausführen des Programms sollte ein `__PYCACHE__`-Verzeichnis entstehen.
Dieses gehört wie alle automatisch generierte Dateien nicht ins Git-Repository.
Um Git darüber zu informieren, kannst du ein .gitignore Datei anlegen.
In dieser kannst du zeilenweise Dateien eintragen die ignoriert werden sollen.
Wenn Git eine Datei ignoriert wird sie nicht in `git status` als untracked angezeigt und
`git add` auf einem höherliegenden Verzeichnis fügt sie nicht hinzu.
......@@ -196,7 +195,7 @@ Wenn Git eine Datei ignoriert wird sie nicht in `git status` als untracked angez
Lege eine `.gitignore`-Datei an, nach der das `__PYCACHE__`-Verzeichnis ignoriert wird.
Bei Erfolg sollte `git status` die Datei nicht mehr als untracked anzeigen.
Darüber hinaus sollte `git log -- __pycache__` keine Commits anzeigen, andernfalls hast du `__PYCACHE__`
aus Versehen getrackt und Comitted.
aus Versehen getrackt und comitted.
]
#info[
.gitignore akzeptiert auch Wildcards, also Sonderzeichen die es ermöglichen mehrere Dateien in einer Zeile abzudecken.
......@@ -209,11 +208,52 @@ Wenn Git eine Datei ignoriert wird sie nicht in `git status` als untracked angez
#warning[
Automatisch generierte Dateien gehören nicht ins Git-Repository. Nicht nur weil das unnötig Speicher wegnimmt,
sondern auch weil die von Menschen vorgenommenen Änderung in der Flut an geänderten generierten Dateien untergehen.
Bei Dateien, die nur teilweise automatisch generiert sind (z.B. `Cargo.lock` in Rust Projekten), kann es hingegen schon sinnvoll sein,
Bei nur teilweise automatisch generiert Dateien (z.B. `Cargo.lock` in Rust Projekten), kann es hingegen schon sinnvoll sein,
sie im Git-Repository zu tracken.
]
= Diff
Der Befehl `git diff` gibt den Unterschied zwischen zwei Versionen aus.
Beispielsweise gibt `git diff 7120114` an, was sich seit Commit `7120114` geändert hat.
Alternativ akzeptiert `git diff` auch Ranges und Dateien, z.B. gibt `git diff 1f44746..7120114 -- csv-core/src/writer.rs` an,
was sich von Commit `1f44746` zu Commit `7120114` in der Datei `csv-core/src/writer.rs` geändert hat.
#task[
Diese und die folgenden Aufgaben beziehen sich das `rust-csv` Projekt.
#set enum(numbering: "a)")
1. Finde mit `git diff` heraus, was sich in den letzten $20$ Commits an der Datei `src/tutorial.rs` geändert hat.
2. Auch `git log` akzeptiert Ranges.
Finde mit `git log` heraus, welche der letzten $20$ Commits die Datei `src/tutorial.rs` geändert haben.
]
#optional-task[
Wie viele Dateien wurden in den letzten $100$ Commits geändert?
Öffne mit `man git-diff` das Manual für den `git diff` Befehl.
Durchsuche die Optionen für eine Option mit der du die Aufgabe einfach lösen kannst.
]
= Checkout
Mit `git checkout` kannst du alte Versionen in deine Working-Area laden.
Z.B. lädt der Befehl `git checkout 1234567` Commit `1234567`.
#task[
Wir viele Zeilen hatte die Datei `README.md` in Commit `77fdafe`?
]
#question[
Was macht `git checkout HEAD`?
]
= Zusammenfassung
Eine Version in Git heißt Commit. Jeder Commit wird anhand eines Hashes eindeutig identifiziert.
Der Hash kann meist mit den ersten $7$ Zeichen abgekürzt werden.
Nach diesem Aufgabenblatt solltest du mit den folgenden Befehlen grundlegend vertraut sein:
- `init`
- `add`
- `commit`
- `log`
- `diff`
- `checkout`
#optional-task[
Wiederhole die Übungen in einem neuen Verzeichnis mit der Entwicklungsumgebung deiner Wahl
......
......@@ -192,7 +192,11 @@
#let (uncover, only, alternatives) = utils.methods(self)
#alternatives[
#align(center)[
`git init` & `git commit`
`git init`
]
][
#align(center)[
`git commit`
]
#fletcher.diagram(
node-stroke: 1pt,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment