faecher:informatik:oberstufe:git:erstes_repo:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
faecher:informatik:oberstufe:git:erstes_repo:start [28.04.2021 15:03] – [Repository Status anzeigen lassen] sbelfaecher:informatik:oberstufe:git:erstes_repo:start [28.04.2021 21:49] – [Material] sbel
Zeile 1: Zeile 1:
-===== Ein erstes Repo =====+===== Das erste Repo =====
  
 ===== Initialisieren ===== ===== Initialisieren =====
Zeile 67: Zeile 67:
 ===== Ein erster Commit ===== ===== Ein erster Commit =====
  
-Den aktuellen Status eines Repositorys kann man sich durch den Befehl ''git status'' anzeigen lassen:+Um den git-Workflow zu verstehen, muss man drei Begriffe unterscheidenDas Arbeitsverzeichnis ("Working Directory") den Index ("Staging Area") und das eigentliche Repository.
  
-<code> +  * **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. 
-$ git status +  * **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 Indes 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).  
-Auf Branch master+  * **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 |}} 
 + 
 +==== Schritt für Schritt ==== 
 + 
 +Neue Dateien befinden sich zunächst "nur" im Arbeitsverzeichnis und werden von git ignoriert. Mit ''git status'' kann man das überprüfen, solche Dateien tauchen dort in der Liste der "Unversionierten Dateien" auf: 
 + 
 +<code bash
 +[frank@rita webseite]$ git status 
 +Auf Branch main
  
 Noch keine Commits Noch keine Commits
  
-nichts zu committen (erstellen/kopieren Sie Dateien und benutzen +Unversionierte Dateien: 
-Sie "git add" zum Versionieren)+  (benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken) 
 + index.html 
 + style.css
  
 +nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien
 +(benutzen Sie "git add" zum Versionieren)
 </code> </code>
  
-Lege nun eine ''index.html'' Datei ein sowie zwei Verzeichnisse - ''css'' und ''img'':+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 Datei ''index.html'' zum Index hinzugefügt, ''style.css'' jedoch nicht.
  
 +<code bash>
 +[frank@rita webseite]$ git add index.html
 +[frank@rita webseite]$ 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:     index.html
 +
 +Unversionierte Dateien:
 +  (benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
 + style.css
 +</code>
 +
 +Wenn man mit den im Index vorgemerkten Änderungen zufrieden ist, macht man einen "Commit". 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 kann.
 +
 +
 +
 +<code bash>
 +[frank@rita webseite]$ git commit -m "Erster commit"
 +[main (Root-Commit) bb0d027] Erster commit
 + 1 file changed, 0 insertions(+), 0 deletions(-)
 + create mode 100644 index.html
 +[frank@rita webseite]$ git status
 +Auf Branch main
 +Unversionierte Dateien:
 +  (benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
 + style.css
 +
 +nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien
 +(benutzen Sie "git add" zum Versionieren)
 +</code>
 +
 +Man erkennt, dass der Index wieder leer ist ("nichts zum Commit vorgemerkt") und die Datei ''style.css'' noch immer unversoniert ist.
 +
 +Die Liste deiner Commits kann man mit ''git log'' ansehen: 
  
 <code> <code>
-sbel@r107-ws15:~/git$ touch index.html +[frank@rita webseite]$ git log 
-sbel@r107-ws15:~/git$ mkdir css +commit 893b24e60a391d2064ea37e61d4af0435bec4f7d (HEAD -> main) 
-sbel@r107-ws15:~/git$ mkdir img +Author: John Doe <john.doe@nirgends.nix> 
-sbel@r107-ws15:~/git$ ls+Date:   Wed Apr 28 20:16:28 2021 +0200 
 + 
 +    CSS hinzugefügt 
 + 
 +commit bb0d027bd6376da3d67c46bbeeb14e5fd1623581 
 +Author: John Doe <john.doe@nirgends.nix> 
 +Date:   Wed Apr 28 15:35:30 2021 +0200 
 + 
 +    Erster commit 
 + 
 +</code> 
 + 
 + 
 +===== Aufgaben ===== 
 + 
 + 
 +{{:aufgabe.png?nolink  |}} 
 + 
 +=== (A1) === 
 + 
 +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? 
 + 
 +---- 
 +{{:aufgabe.png?nolink  |}} 
 + 
 +=== (A2) === 
 +Lege ein Verzeichnis ''webseite'' an,  erstelle dort die Dateien ''index.html'' Datei ein sowie zwei weitere Verzeichnisse - ''css'' und ''img'': 
 + 
 +<code bash> 
 +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 css  img  index.html
 </code> </code>
  
-{{ .:gitstagingcommit.png |}}+  * 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: 
 + 
 +<code css> 
 +body { 
 +  color: #666; 
 +
 + 
 +h1  
 + color: green; 
 + text-decoration: underline;  
 +
 + 
 +</code> 
 + 
 +Füge außerdem in die Datei ''index.html'' den folgenden Inhalt ein: 
 + 
 +<code html> 
 +<!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> 
 +</code> 
 + 
 +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 =====
-  * Neue Dateien befinden sich zunächst im Arbeitsverzeichnis und werden von git ignoriert. Teste das mit ''git status''+
-  * Mit dem Befehl ''git add'' wird eine Datei in gits "Staging Area" verschoben - 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. Dann macht man einen "Commit". Füge die Datei ''index.html'' deiner Staging Area hinzu und kontrolliere das Ergebnis mit ''git status'' +
-  * Führe den Befehl ''git commit'' aus, gib eine Commit-Message an. +
-  * Überprüfe den Zustand von Arbeitsverzeichnis und Staging Area mit ''git status''. Schau dir die Liste deiner Commits mit ''git log'' an.+
  
 +{{simplefilelist>:faecher:informatik:oberstufe:git:erstes_repo:*}}