Dies ist eine alte Version des Dokuments!
Das erste Repo
Initialisieren
Um die Abläufe und die Funktionsweise zu erproben, wollen wir zunächst ein Verzeichnis unter Versionskontrolle stellen, in dem wir ein Tagebuch anlegen. Wir erstellen also ein Verzeichnis tagebuch
und initialisieren dort ein Git-Repository:
frank@pike:~$ mkdir tagebuch frank@pike:~$ cd tagebuch/ frank@pike:~/tagebuch$ git init Leeres Git-Repository in /home/frank/tagebuch/.git/ initialisiert
Nun steht das Verzeichnis tagebuch
unter Versionskontrolle. Das lokale Git-Repository befindet sich im Unterverzeichnis .git
:
$ ls -la insgesamt 132 drwxr-xr-x 3 frank frank 4096 24. Okt 13:32 . drwxr-xr-x 21 frank frank 122880 24. Okt 13:32 .. drwxr-xr-x 7 frank frank 4096 24. Okt 13:32 .git
Repository Status anzeigen lassen
Mit dem Befehl git status
kann man sich den aktuellen Status des Repos anzeigen lassen:
frank@pike:~/tagebuch$ git status Auf Branch main Noch keine Commits nichts zu committen (erstellen/kopieren Sie Dateien und benutzen Sie "git add" zum Versionieren)
Ein erster Tagebucheintrag
Lege mit einem Texteditor1) eine Datei aufstehen.txt
an. Du kannst in diese Datei z.B. hineinschreiben, wie du geschlafen hast und wann du aufgestanden bist. Das folgende Beispiel verwendet den Editor nano
unter Linux, du kannst aber auch Notepadunter Windows oder Kate unter LInux verwenden, diese Editoren haben eine GUI. Wichtig ist, dass du die Datei im Verzeichnis ''tagebuch'' abspeicherst.
<code bash>
frank@pike:~/tagebuch$ nano aufstehen.txt
frank@pike:~/tagebuch$ cat aufstehen.txt
Ich habe gut geschlafen.
Um 6:20 bin ich aufgestanden.
</code>
Unser Tagebuch enthält nun einen Eintrag in ''aufstehen.txt''. Wir wollen jetzt den Zustand des Tagebuchs an dieser Stelle so in unserer Versionsverwaltung festhalten, dass wir ihn später wieder verwenden können.
===== Ein erster Commit =====
Um den git-Workflow zu verstehen, muss man drei Begriffe unterscheiden: Das Arbeitsverzeichnis ("Working Directory") den Index ("Staging Area") und das eigentliche Repository.
* **Arbeitsverzeichnis (Working Directory):** Das ist Verzeichnis, welches man zuvor mit ''git init'' unter Versionskontrolle gestellt hat mit allen seinen Dateien und Unterverzeichnissen, so wie man es auf der Festplatte vorfindet. Das "spezielle" Verzeichnis ''.git'' wird dabei ignoriert, es dient der internen Verwaltung der Abläufe durch git.
* **Index ("Staging Area")**: Im Index werden zunächst alle Dateien eingetragen, die in einem nächsten Schritt zu einem Snapshot zusammengefasst und im Repository gespeichert werden sollen. Der Sinn des Index erschließt sich nicht unmittelbar, da man dazu neigt, sich vorzustellen, dass man nacheinander Änderungen in deinem Arbeitsverzeichnis vornimmt und dabei von Zeit zu Zeit einfach Snapshots des gesamten Arbeitsverzeichnisses anlegt - das trifft aber nicht zu. Es gibt zahlreiche Anwendungsfälle, bei denen man nicht alle Änderungen des Arbeitsverzeichnisses in einem Snapshot festhalten möchte, sondern z.B. auf mehrere Snapshots aufteilen will. Außerdem kommt es häufig vor, dass sich im Arbeitsverzeichnis Dateien befinden, die man gar nicht unter Versionskontrolle stellen möchte, beispielsweise Compilate von Java Programmen (class-Dateien).
* **Repository:** Wenn man im Index alle Dateien für den nächsten Snapshot zusammengestellt hat, kann man einen neuen Snapshot erstellen. Ein solcher Snapshot heißt **Commit** und wird durch eine Hashsumme identifiziert, außerdem werden Metainformationen wie Zeit und Name des Commiters festgehalten. Ein Commit wird mit dem Befehl ''git commit'' durchgeführt. Nach einem Commit ist der Index stets leer, da ja alle Änderungen, die dort vorgemerkt waren, in den Snapshot überführt wurden.
{{ .:gitstagingcommit.png
git status Auf Branch main Noch keine Commits Unversionierte Dateien: (benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken) aufstehen.txt nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien (benutzen Sie "git add" zum Versionieren)
Mit dem Befehl git add
wird eine Datei im Index vorgemerkt - das kann man sich vorstellen wie ein Einkaufswagen, in dem neue Dateien und Änderungen gesammelt werden, bis man zu einem Punkt kommt, den man sich "merken" möchte. Im Folgenden habe ich die einzige Datei aufstehen.txt
zum Index hinzugefügt:
frank@pike:~/tagebuch$ git add aufstehen.txt frank@pike:~/tagebuch$ git status Auf Branch main Noch keine Commits Zum Commit vorgemerkte Änderungen: (benutzen Sie "git rm --cached <Datei>..." zum Entfernen aus der Staging-Area) neue Datei: aufstehen.txt
Wenn man mit den im Index vorgemerkten Änderungen zufrieden ist, macht man einen "Commit"2).
Mit dem Befehl git commit -m "Erster Commit"
legt man einen Commit mit einer Commit-Message an (Paramter -m
). Wenn man die Commit-Message nicht mit -m
angibt, öffnet sich ein Editor, in dem man diese bearbeiten muss.
frank@pike:~/tagebuch$ git commit -m "Aufstehen!" [main (Root-Commit) 9ee8f8b] Aufstehen! 1 file changed, 2 insertions(+) create mode 100644 aufstehen.txt
Wenn man den Status des Arbeitsverzeichnisses jetzt erneut abfragt, erhält man folgende Ausgabe:
frank@pike:~/tagebuch$ git status Auf Branch main nichts zu committen, Arbeitsverzeichnis unverändert
Man erkennt, dass der Index wieder leer ist ("nichts zum Commit vorgemerkt").
Nun kann man weitere Änderungen im Tagebuch vornehmen und sich an allen wichtigen Stellen den Zustand der Dateien in einem Commit merken.
===== Wir frühstücken =====
=== (A1) ===
* Halte in der Datei fruehstueck.txt
fest, was es zum Frühstück gab.
* Kontrolliere mit git status
, dass es die Datei jetzt gibt, sie aber nicht unter Versionskontrolle steht.
* Füge die Datei fruehstuck.txt
mit dem Befehl git add fuehstuck.txt
zum Index hinzu.
* Erstelle einen Commit für das Frühstück. Vergiss nicht die Commit-Message nach der Option -m
.
* Überprüfe den Zustand deines Repositorys.
Hallo ++
Aufgaben
Erkläre, was man machen muss, um von der derzeitigen Situation ausgehende, die Datei style.css
ebenfalls unter Versionskontrolle zu stellen. Welche git Befehle würdest du verwenden?
(A2)
Lege ein Verzeichnis webseite
an, erstelle dort die Dateien index.html
Datei ein sowie zwei weitere Verzeichnisse - css
und img
:
sbel@r107-ws15:~/git$ mkdir webseite sbel@r107-ws15:~/git$ cd webseite sbel@r107-ws15:~/git/webseite$ touch index.html sbel@r107-ws15:~/git/webseite$ mkdir css sbel@r107-ws15:~/git/webseite$ mkdir img sbel@r107-ws15:~/git/webseite$ ls css img index.html
- Initialisisere das Verzeichnise
webseite
als git-Repository. - Lasse dir den Status des Repos anzeigen
- Füge die Datei und die beiden Verzeichnisse dem Index hinzu und erstelle einen ersten Commit. Untersuche den Status deines Repos. Welche Beobachtung machst du hinsichtlich der beiden Verzeichnisse?
Erstelle nun im Verzeichnis css
eine Datei style.css
mit dem folgenden Inhalt:
body { color: #666; } h1 { color: green; text-decoration: underline; }
Füge außerdem in die Datei index.html
den folgenden Inhalt ein:
<!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" type="text/css" href="css/style.css" media="screen" /> <title>Superwebseite!</title> </head> <body> <h1>Meine erste Webseite!</h1> </body> </html>
Untersuche jetzt den Zustand deines Repos.
Erstelle weiteren Commit, der die letzten Änderungen enthält. Was ist hierfür der Reihe nach zu tun?
Ändere weitere Teile deiner Webseite. Erstelle jeweils an sinnvollen Stellen weitere Commits mit entsprechenden Commit-Messages.
Betrachte die Ausgabe des Befehls git log
.
Material
Filename | Filesize | Last modified |
---|---|---|
02-erstes-repo.odp | 1.2 MiB | 28.04.2021 20:18 |
02-erstes-repo.pdf | 431.1 KiB | 28.04.2021 20:18 |
2023-10-29_19-56.png | 32.5 KiB | 29.10.2023 19:57 |
2023-10-29_20-02.png | 33.0 KiB | 29.10.2023 20:02 |
commit.drawio.png | 35.3 KiB | 29.10.2023 20:22 |
git_add.drawio.png | 39.9 KiB | 29.10.2023 20:12 |
gitstagingcommit.png | 61.2 KiB | 28.04.2021 15:14 |
zweitercommit.drawio.png | 63.2 KiB | 29.10.2023 20:41 |