From 7915b3c60348e35e7f4c77820c15415edc2b6d96 Mon Sep 17 00:00:00 2001
From: morit02 <morit02@mi.fu-berlin.de>
Date: Mon, 27 Nov 2023 22:11:16 +0100
Subject: [PATCH] Add: how to create basic snapshots

---
 README.md | 208 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 207 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 72f4fe6..b7d5971 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ Zum anlegen von Git Repositories wird standardmäßig das **aktuelle Verzeichnis
 Um in einen bestimmten Verzeichnis ein Git Repository anzulegen kann der **Pfad** als weiterer **Parameter** angegeben werden.
 
 **Beispiel:**
-Als Beispiel gibt es die folgende Verzeichnisstruktur, wobei das aktuelle Verzeichnis mit einem **\*** makiert ist:
+Als Beispiel gibt es die folgende Verzeichnisstruktur, wobei das aktuelle Verzeichnis mit einem **\*** markiert ist:
 
 <table>
 <tr>
@@ -56,6 +56,212 @@ git init
 
 
 
+## Änderungen speichern
+Das **Hinzufügen** von Dateien/Verzeichnissen erfolgt in **zwei Schritten**.
+1. Dokumente/Verzeichnisse zum **Staging-Bereich** (staging area) hinzufügen
+1. Dokumente/Verzeichnisse des **Staging-Bereichs** als neue Version speichern (**Commit** als neue Projektversion)
+
+
+### Staging-Bereich
+Der Staging-Bereich dient als **Sammlung** von Dokumenten/Verzeichnissen deren **Veränderungen** gespeichert werden sollen.
+
+Dokumente/Verzeichnisse befinden sich **nicht** automatisch im Staging-Bereich.
+Es müssen also alle Dokumente/Verzeichnisse **explizit** zum **Staging-Bereich** **hinzugefügt** werden.
+
+Dokumtente/Verzeichnisse können mit `git add <file/directory>` oder `git stage <file/directory>` zum **Staging-Bereich hinzugefügt** werden.
+
+
+Dokumente/Verzeichnisse können mit `git rm <file/directory>` wieder aus dem **Staging-Bereich entfernt** werden.
+
+
+**Beispiel:**
+- In dem Beispiel wurden bereits Dokumente/Verzeichnisse zum Staging-Bereich hinzugefügt
+- Dokumente/Verzeichnisse die sich im **Staging-Bereich befinden** sind mit einem **(+)** markiert
+
+<table>
+<tr>
+<th> Dokumente/Verzeichnisse </th>
+<th> Git Befehl - Staging von Dokumenten/Verzeichnissen </th>
+<th> Git Befehl - Unstaging von Dokumenten/Verzeichnissen </th>
+</tr>
+
+<td>
+
+```
+~/DIRECTORY_1 (+)
+~/DIRECTORY_2
+~/file_1.txt (+)
+~/file_2.txt
+```
+</td>
+
+<!--- Staging Table -->
+<td>
+<table>
+<tr>
+<td>
+
+- Staging DIRECTORY_2
+
+```
+git add DIRECTORY_2
+```
+</td>
+
+<td>
+
+- Staging file_2.txt
+
+```
+git add file_2.txt
+```
+</td>
+</tr>
+
+<tr>
+<td>
+
+- Resultat:
+
+```
+~/DIRECTORY_1 (+)
+~/DIRECTORY_2 (+)
+~/file_1.txt (+)
+~/file_2.txt
+```
+</td>
+
+<td>
+
+- Resultat:
+
+```
+~/DIRECTORY_1 (+)
+~/DIRECTORY_2
+~/file_1.txt (+)
+~/file_2.txt (+)
+```
+</td>
+</tr>
+</table>
+</td>
+
+
+<!--- Unstaging Table -->
+<td>
+<table>
+<tr>
+<td>
+
+- Unstaging DIRECTORY_1
+
+```
+git rm DIRECTORY_1
+```
+</td>
+
+<td>
+
+- Unstaging file_1.txt
+
+```
+git rm file_1.txt
+```
+</td>
+</tr>
+
+<tr>
+<td>
+
+- Resultat:
+
+```
+~/DIRECTORY_1
+~/DIRECTORY_2
+~/file_1.txt (+)
+~/file_2.txt
+```
+</td>
+
+<td>
+
+- Resultat:
+
+```
+~/DIRECTORY_1 (+)
+~/DIRECTORY_2
+~/file_1.txt
+~/file_2.txt
+```
+</td>
+</tr>
+</table>
+</td>
+</table>
+
+
+### Projektversion anlegen
+Eine neue **Projektversion** wird mithilfe der Dokumente/Verzeichnisse, die sich im **Staging-Bereich** befinden, erstellt.
+Dokumente/Verzeichnisse die sich **nicht** im **Staging-Bereich** befinden werden **nicht** für die neue **Projektversion** verwendet.
+
+Eine neue **Projektversion** wird nur im **lokalen Repository** erstellt!
+
+Eine **Projektversion** wird in **Git**: ***Commit*** genannt und kann mit `git commit -m "commit message"` erstellt werden.
+Mit dem **Parameter** `-m` kann ein Text für den **aktuellen Commit** (die neue Projektversion) gespeichert werden.
+
+Dokumente/Verzeichnisse die mit einem ***Commit*** als neue Projektversion gespeichert werden, werden **automatisch** wieder aus dem **Staging-Bereich entfernt**.
+
+**Beispiel:**
+- In dem Beispiel wurden bereits Dokumente/Verzeichnisse zum Staging-Bereich hinzugefügt.
+- Dokumente/Verzeichnisse die sich im **Staging-Bereich** befinden sind mit einem **(+)** markiert
+
+<table>
+<tr>
+<th> Dokumente/Verzeichnisse </th>
+<th> Git Befehl - Erstellen eines Commits (neue Projektversion erstellen) </th>
+</tr>
+
+<td>
+
+```
+~/DIRECTORY_1 (+)
+~/DIRECTORY_2
+~/file_1.txt (+)
+~/file_2.txt
+```
+</td>
+
+<!--- Commit Table -->
+<td>
+<table>
+<tr>
+<td>
+
+- **Commit** alle Dokumente/Verzeichnisse im Staging-Bereich
+```
+git commit -m "Add files/directories"
+```
+</td>
+</tr>
+
+<tr>
+<td>
+
+- Resultat:
+```
+~/DIRECTORY_1
+~/DIRECTORY_2
+~/file_1.txt
+~/file_2.txt
+```
+</td>
+</tr>
+</table>
+</td>
+</table>
+
+
+
 ## Add your files
 
 - [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
-- 
GitLab