diff --git a/Praesentation/Praes_Git_Konsole/Git_auf_der_Konsole.adoc b/Praesentation/Praes_Git_Konsole/Git_auf_der_Konsole.adoc index 7bb77e4..be82a40 100644 --- a/Praesentation/Praes_Git_Konsole/Git_auf_der_Konsole.adoc +++ b/Praesentation/Praes_Git_Konsole/Git_auf_der_Konsole.adoc @@ -69,7 +69,7 @@ drwxrwxr-x 2 xxx 4096 Feb 12 08:25 hooks ... ---- -== Repository Status anzeigen lassen +=== Repository Status anzeigen lassen Das Verzeichnis tagebuch ist jetzt ein "git-Repository" - es wird von git "beobachtet". Mit dem Befehl `*git status*` kann der aktuelle Status des "Repos" angezeigt werden. [source,bash] @@ -90,7 +90,7 @@ Um den git-Workflow zu verstehen, müssen drei Begriffe unterschieden werden: Da === Der Git-Workflow image::git_stage_commit_1.png[Git-Workflow 1] -== Zuerst Stagen ... +=== Zuerst Stagen ... Eine Datei wird dem Working Directory hinzugefügt. image::aufstehen.png[Datei Aufstehen hinzu] @@ -126,7 +126,7 @@ Changes to be committed: === Zuerst Stagen ... image::git_add.png[Git Add, width=120%] -== ... dann Commiten +=== ... dann Commiten Wenn man mit den im Index vorgemerkten Änderungen zufrieden ist, kann mit `*git commit*` ein "Commit" durchgeführt werden. Dadurch wird ein Snapshot mit einer eindeutigen ID erstellt und die Staging Area geleert. Jeder Snapshot lässt sich zu jedem Zeitpunkt wieder herstellen. @@ -160,20 +160,20 @@ nothing to commit, working tree clean image::ersterCommit.png[Working-Tree, width=90%] -== Git-Workflow - Übersicht +=== Git-Workflow - Übersicht image::git_stage_commit_2.png[Git-Workflow 2, width=50%] -== Arbeitsaufträge +=== Arbeitsaufträge [NOTE] ==== -. Halten Sie in der Datei `*fruehstueck.txt*` fest, was es zum Frühstück gab. +. Halten Sie in der Datei `*fruehstueck.txt*` fest, was es zum Frühstück gab . Kontrollieren Sie mit `*git status*`, dass die Datei jetzt existiert, sie jedoch noch nicht unter -Versionskontrolle steht. +Versionskontrolle steht . Fügen Sie die Datei `*fruehstueck.txt*` mit dem Befehl `*git add*` `*fruehstueck.txt*` zum Index -hinzu. +hinzu . Erstellen Sie einen Commit für das Frühstück. Vergessen Sie die Commit-Message nach der -`*Option -m*` nicht. -. Überprüfen Sie mit `*git status*` den Zustand des Repositorys erneut. +`*Option -m*` nicht +. Überprüfen Sie mit `*git status*` den Zustand des Repositorys erneut ==== === Aktueller Stand @@ -203,21 +203,53 @@ Date: Wed Oct 9 14:31:24 2024 +0200 Erster Commit: 'aufstehen.txt' angelegt ---- +=== Git log mit schöner Ausgabe +Mit `*git log --graph --oneline --decorate --all --color*` kann man alle Commits sehr übersichtlich (am Working Tree) ausgeben. + +[source,bash] +---- +tagebuch$ git log --graph --oneline --decorate --all --color + +* 1393d67 (HEAD -> main) fruehstuecken.txt hinzu +* 87a64ff aufstehen.txt hinzu +---- + +=== Git log mit Alias +Da der Befehl `*git log --graph --oneline --decorate --all --color*` sehr lang ist, kann man einen Alias z.B. mit dem Namen "lg" definieren. + +[source,bash] +---- +tagebuch$ git config --global alias.lg "log --graph + --oneline --decorate --all --color" + +tagebuch$ git lg + +* 1393d67 (HEAD -> main) fruehstuecken.txt hinzu +* 87a64ff aufstehen.txt hinzu +---- + === Aktueller Working Tree -Man sieht, dass die Commit-Hashes sehr lange sind. Für die Identifizierung eines Commits reichen jedoch die ersten 7 Stellen des Hashes aus. +Die Commit-Hashes sind sehr lang (38 Zeichen). Für die Identifizierung eines Commits reichen jedoch die ersten 7 Stellen des Hashes aus. +Hier die Ansicht des Working-Trees mit der Git-GUI `*gitg*`. -image::zweiterCommit.png[Working-Tree Zweiter Git Commit, width=120%] +[source,bash] +---- +tagebuch$ gitg +---- -== Arbeitsaufträge +image::git_working_tree_gitg.png[Working-Tree Zweiter Git Commit] + +=== Arbeitsaufträge [NOTE] ==== . Fügen Sie dem Tagebuch den Eintrag `*mittagessen.txt*` als Datei hinzu, zunächst ohne diese -zu versionieren. -. Ändern Sie die Datei `*fruehstueck.txt*` und schreiben Sie zusätzlich Schokolade in die Datei. -. Überprüfen Sie mit `*git status*` den Zustand des Repositorys. -. Fügen Sie mit `*git add fruehstueck.txt*` die Datei `*fruehstueck.txt*` zum Index hinzu. -. Erstellen Sie einen Commit. Vergessen Sie die Commit-Message nach der Option `*-m*` nicht. -. Stagen Sie ebenfalls die neue Datei `*mittagessen.txt*` mit `*git add mittagessen.txt*`. +zu versionieren +. Ändern Sie die Datei `*fruehstueck.txt*` und schreiben Sie zusätzlich Schokolade in die Datei +. Überprüfen Sie mit `*git status*` den Zustand des Repositorys +. Fügen Sie mit `*git add fruehstueck.txt*` die Datei `*fruehstueck.txt*` zum Index hinzu +. Erstellen Sie einen Commit mit `*git commit -m "..."*` +. Stagen Sie auch die Datei `*mittagessen.txt*` z.B. mit `*git add .*` +. Betrachten Sie mit `*git lg*` oder der Git-GUI `*gitg*` den Zustand des Repositorys ==== === Veränderungen @@ -295,10 +327,84 @@ nothing to commit, working tree clean === Aktueller Stand image::mittagessen.png[Mittagessen, width=120%] -== Versionshistorie +=== Versionshistorie image::aktuell.png[Versionshistorie, width=30%] -== Zeitreise +== Globales Repo auf GitCamp +[NOTE] +==== +Bisher waren alle Änderungen lokal. Nun sollen alle Versionen des main-branches auf GitCamp gespeichert werden. +Alle dazu benötigten Schritte werden im folgenden vorgeführt. +Die Wiederholung all dieser Schritte findet später in der Fortbildung erneut statt. +==== + +== Zusammenfassung + +=== Historie +image::git_log.png[Commit-Historie] + +=== Status Unstaged +image::git_status_1.png[Status1] + +=== Unstaged Close-Look +image::git_status_1_close.png[Status1 Close-Up] + +=== Status Staged +image::git_status_2.png[Status2] + +=== Staged Close-Look +image::git_status_2_close.png[Status2 Close-Up] + +== Git Cheatsheets + +=== Git globale Voreinstellungen +[source,bash] +---- +// Benutzername und Mailadresse definieren +$ git config --global user.name "Max Mustermann" +$ git config --global user.email max@example.org + +// Credentials für 90 Minuten zwischenspeichern +$ git config --global credential.helper "cache + --timeout=5400" + +// Alias 'git lg' für 'git log' mit schlichter Formatierung +$ git config --global alias.lg "log --graph --oneline + --decorate --all --color" +---- + +=== Git lokaler Workflow +[source,bash] +---- +// Alle Veraenderungen stagen +$ git add . + +// Alle Veraenderungen mit Nachricht committen +$ git commit -m "..." + +// Alle Aenderungen anzeigen lassen +$ git status + +// Die Historie mit Alias lg anzeigen lassen +$ git lg +---- + +=== GitCamp Repo erstellen +Auf GitCamp durch Klicken auf "Neues Repository" einen "Repository-Name" eintragen und durch Klicken auf "Repository Erstellen" bestätigen. +Danach kann man lokal auf der Konsole folgendes eintragen: + +[source,bash] +---- +$ git init +$ git checkout -b main +$ git add . +$ git commit -m "first commit" +$ git remote add origin + https://.gitcamp-bw.de//.git +$ git push -u origin main +---- + +== (Optional) - Zeitreise [NOTE] ==== Man sollte nur dann zu einem älteren Stand der Dateien zurückkehren, wenn @@ -363,15 +469,15 @@ HEAD detached at 2f40bf7 nothing to commit, working tree clean ---- -== Arbeitsaufträge +=== Arbeitsaufträge [NOTE] ==== -. Emitteln Sie mit `*git log*` einen Commit-Hash (die ersten 7 Ziffern) zu dem Sie zurückkehren möchten. -. Kehren Sie mit `*git checkout *` zu diesem Commit zurück. -. Betrachten Sie mit `*git status*` den Zustand des Repositorys. -. Überprüfen Sie in Ihrem Arbeitsverzeichnis die Dateien und deren Inhalte. -. Betrachten Sie mit `*git log*` die Versionshistorie. -. (`*git log --all*` zeigt alle Commits. Probieren Sie das aus.) +. Emitteln Sie mit `*git log*` oder `*git lg*` einen Commit-Hash (die ersten 7 Ziffern) zu dem Sie zurückkehren möchten +. Kehren Sie mit `*git checkout *` zu diesem Commit zurück +. Betrachten Sie mit `*git status*` den Zustand des Repositorys +. Überprüfen Sie in Ihrem Arbeitsverzeichnis die Dateien und deren Inhalte +. Betrachten Sie mit `*git log*` die Versionshistorie +. `*git log --all*` oder `*git lg*` zeigt alle Commits. Probieren Sie das aus ==== === Vergangenheit @@ -388,39 +494,9 @@ tagebuch$ gitk === gitk-Visualisierung image::checkout2.png[Detached Head, width=100%] -== Weitere Aufträge +== (Optional) - Weitere Aufträge [NOTE] ==== . Bearbeiten Sie das Kapitel "4.3.4 Manipulation der Vergangenheit" im Skript. . Bearbeiten Sie das Kapitel "4.3.2. Änderungen zwischen Commits ansehen" im Skript. -==== - -== Zusammenfassung - -=== Historie -image::git_log.png[Commit-Historie] - -=== Status Unstaged -image::git_status_1.png[Status1] - -=== Unstaged Close-Up -image::git_status_1_close.png[Status1 Close-Up] - -=== Status Staged -image::git_status_2.png[Status2] - -=== Staged Close-Up -image::git_status_2_close.png[Status2 Close-Up] - -== Git Cheatsheet -[source,bash] ----- -// Credentials für 90 Minuten zwischenspeichern -$ git config --global credential.helper - "cache --timeout=5400" - -// Alias 'git lg' für 'git log' mit schlichter Formatierung -$ git config --global alias.lg "log --graph --pretty=format: - '%Cred%h%Creset-%C(yellow)%d%Creset %s %Cgreen(%cr) %Creset' - --abbrev-commit" ----- \ No newline at end of file +==== \ No newline at end of file diff --git a/Praesentation/Praes_Git_Konsole/Git_auf_der_Konsole.html b/Praesentation/Praes_Git_Konsole/Git_auf_der_Konsole.html index 04500d4..709ddd8 100644 --- a/Praesentation/Praes_Git_Konsole/Git_auf_der_Konsole.html +++ b/Praesentation/Praes_Git_Konsole/Git_auf_der_Konsole.html @@ -533,18 +533,17 @@ insgesamt 44 -rw-rw-r-- 1 xxx 21 Feb 12 08:25 HEAD drwxrwxr-x 2 xxx 4096 Feb 12 08:25 hooks -rw-rw-r-- 1 xxx 406 Feb 12 08:39 index -... -

Repository Status anzeigen lassen

Das Verzeichnis tagebuch ist jetzt ein "git-Repository" - es wird von git "beobachtet". Mit dem Befehl git status kann der aktuelle Status des "Repos" angezeigt werden.

+...

Repository Status anzeigen lassen

Das Verzeichnis tagebuch ist jetzt ein "git-Repository" - es wird von git "beobachtet". Mit dem Befehl git status kann der aktuelle Status des "Repos" angezeigt werden.

tagebuch$ git status
 
 On branch main
 No commits yet
 Nothing to commit
-(create/copy files and use "git add" to track)
+(create/copy files and use "git add" to track)

Der Git-Workflow

Um den git-Workflow zu verstehen, müssen drei Begriffe unterschieden werden: Das Arbeitsverzeichnis ("Working Directory"), die Staging Area ("Index") und das eigentliche -Repository ("Snapshot").

Der Git-Workflow

Git-Workflow 1
-

Zuerst Stagen …​

Eine Datei wird dem Working Directory hinzugefügt.

Datei Aufstehen hinzu

Zuerst Stagen …​

git status zeigt "Untracked Files".

+Repository ("Snapshot").

Der Git-Workflow

Git-Workflow 1

Zuerst Stagen …​

Eine Datei wird dem Working Directory hinzugefügt.

+
Datei Aufstehen hinzu

Zuerst Stagen …​

git status zeigt "Untracked Files".

tagebuch$ git status
 
 On branch main
@@ -558,8 +557,7 @@ On branch main
 No commits yet
 Changes to be committed:
 (use "git rm --cached <file>..." to unstage)
-    new file: aufstehen.txt

Zuerst Stagen …​

Git Add
-

…​ dann Commiten

Wenn man mit den im Index vorgemerkten Änderungen zufrieden ist, kann mit git commit ein "Commit" + new file: aufstehen.txt

Zuerst Stagen …​

Git Add

…​ dann Commiten

Wenn man mit den im Index vorgemerkten Änderungen zufrieden ist, kann mit git commit ein "Commit" durchgeführt werden. Dadurch wird ein Snapshot mit einer eindeutigen ID erstellt und die Staging Area geleert. Jeder Snapshot lässt sich zu jedem Zeitpunkt wieder herstellen.

…​ dann Commiten

Mit dem Befehl git commit -m "Erster Commit: aufstehen.txt" wird ein Commit mit einer Commit-Message angelegt (Parameter -m).

@@ -572,12 +570,10 @@ Commit-Message angelegt (Parameter -m).

On branch main nothing to commit, working tree clean -
Working-Tree
-

Git-Workflow - Übersicht

Git-Workflow 2
-

Arbeitsaufträge

  1. Halten Sie in der Datei fruehstueck.txt fest, was es zum Frühstück gab.

  2. Kontrollieren Sie mit git status, dass die Datei jetzt existiert, sie jedoch noch nicht unter -Versionskontrolle steht.

  3. Fügen Sie die Datei fruehstueck.txt mit dem Befehl git add fruehstueck.txt zum Index -hinzu.

  4. Erstellen Sie einen Commit für das Frühstück. Vergessen Sie die Commit-Message nach der -Option -m nicht.

  5. Überprüfen Sie mit git status den Zustand des Repositorys erneut.

Aktueller Stand

Zweiter Git Commit
+
Working-Tree

Git-Workflow - Übersicht

Git-Workflow 2

Arbeitsaufträge

  1. Halten Sie in der Datei fruehstueck.txt fest, was es zum Frühstück gab

  2. Kontrollieren Sie mit git status, dass die Datei jetzt existiert, sie jedoch noch nicht unter +Versionskontrolle steht

  3. Fügen Sie die Datei fruehstueck.txt mit dem Befehl git add fruehstueck.txt zum Index +hinzu

  4. Erstellen Sie einen Commit für das Frühstück. Vergessen Sie die Commit-Message nach der +Option -m nicht

  5. Überprüfen Sie mit git status den Zustand des Repositorys erneut

Aktueller Stand

Zweiter Git Commit

Übersicht über Commits

Ein Commit kann also wie im Bild dargestellt als Archivbox betrachtet werden, in dem jeweils der Zustand aller versionierten Dateien festgehalten ist. Ein Commit wird durch einen hexadezimalen "Hashwert" identifiziert, das ist gewissermaßen die eindeutige Nummer eines @@ -592,10 +588,22 @@ Frühstück in Datei 'fruehstueck.txt' hinzugefügt commit 9eefa5687ebae993ce7ca0f597159418f1d7cd Author: Max Mustermann <max.mustermann@zsl-rska.de> Date: Wed Oct 9 14:31:24 2024 +0200 -Erster Commit: 'aufstehen.txt' angelegt

Aktueller Working Tree

Man sieht, dass die Commit-Hashes sehr lange sind. Für die Identifizierung eines Commits reichen jedoch die ersten 7 Stellen des Hashes aus.

-
Working-Tree Zweiter Git Commit
-

Arbeitsaufträge

  1. Fügen Sie dem Tagebuch den Eintrag mittagessen.txt als Datei hinzu, zunächst ohne diese -zu versionieren.

  2. Ändern Sie die Datei fruehstueck.txt und schreiben Sie zusätzlich Schokolade in die Datei.

  3. Überprüfen Sie mit git status den Zustand des Repositorys.

  4. Fügen Sie mit git add fruehstueck.txt die Datei fruehstueck.txt zum Index hinzu.

  5. Erstellen Sie einen Commit. Vergessen Sie die Commit-Message nach der Option -m nicht.

  6. Stagen Sie ebenfalls die neue Datei mittagessen.txt mit git add mittagessen.txt.

Veränderungen

tagebuch$ git status
+Erster Commit: 'aufstehen.txt' angelegt

Git log mit schöner Ausgabe

Mit git log --graph --oneline --decorate --all --color kann man alle Commits sehr übersichtlich (am Working Tree) ausgeben.

+
tagebuch$ git log --graph --oneline --decorate --all --color
+
+* 1393d67 (HEAD -> main) fruehstuecken.txt hinzu
+* 87a64ff aufstehen.txt hinzu

Git log mit Alias

Da der Befehl git log --graph --oneline --decorate --all --color sehr lang ist, kann man einen Alias z.B. mit dem Namen "lg" definieren.

+
tagebuch$ git config --global alias.lg "log --graph
+                --oneline --decorate --all --color"
+
+tagebuch$ git lg
+
+* 1393d67 (HEAD -> main) fruehstuecken.txt hinzu
+* 87a64ff aufstehen.txt hinzu

Aktueller Working Tree

Die Commit-Hashes sind sehr lang (38 Zeichen). Für die Identifizierung eines Commits reichen jedoch die ersten 7 Stellen des Hashes aus. +Hier die Ansicht des Working-Trees mit der Git-GUI gitg.

+
tagebuch$ gitg
+
Working-Tree Zweiter Git Commit

Arbeitsaufträge

  1. Fügen Sie dem Tagebuch den Eintrag mittagessen.txt als Datei hinzu, zunächst ohne diese +zu versionieren

  2. Ändern Sie die Datei fruehstueck.txt und schreiben Sie zusätzlich Schokolade in die Datei

  3. Überprüfen Sie mit git status den Zustand des Repositorys

  4. Fügen Sie mit git add fruehstueck.txt die Datei fruehstueck.txt zum Index hinzu

  5. Erstellen Sie einen Commit mit git commit -m "…​"

  6. Stagen Sie auch die Datei mittagessen.txt z.B. mit git add .

  7. Betrachten Sie mit git lg oder der Git-GUI gitg den Zustand des Repositorys

Veränderungen

tagebuch$ git status
 
 On branch main
 Changes not staged for commit:
@@ -643,9 +651,41 @@ create mode 100644 mittagessen.txt
 $ git status
 
 On branch main
-nothing to commit, working tree clean

Aktueller Stand

Mittagessen
-

Versionshistorie

Versionshistorie
-

Zeitreise

Man sollte nur dann zu einem älteren Stand der Dateien zurückkehren, wenn +nothing to commit, working tree clean

Aktueller Stand

Mittagessen

Versionshistorie

Versionshistorie
+

Globales Repo auf GitCamp

Bisher waren alle Änderungen lokal. Nun sollen alle Versionen des main-branches auf GitCamp gespeichert werden. +Alle dazu benötigten Schritte werden im folgenden vorgeführt. +Die Wiederholung all dieser Schritte findet später in der Fortbildung erneut statt.

+

Zusammenfassung

Historie

Commit-Historie

Status Unstaged

Status1

Unstaged Close-Look

Status1 Close-Up

Status Staged

Status2

Staged Close-Look

Status2 Close-Up
+

Git Cheatsheets

Git globale Voreinstellungen

// Benutzername und Mailadresse definieren
+$ git config --global user.name "Max Mustermann"
+$ git config --global user.email max@example.org
+
+// Credentials für 90 Minuten zwischenspeichern
+$ git config --global credential.helper "cache
+                                        --timeout=5400"
+
+// Alias 'git lg' für 'git log' mit schlichter Formatierung
+$ git config --global alias.lg "log --graph --oneline
+                                --decorate --all --color"

Git lokaler Workflow

// Alle Veraenderungen stagen
+$ git add .
+
+// Alle Veraenderungen mit Nachricht committen
+$ git commit -m "..."
+
+// Alle Aenderungen anzeigen lassen
+$ git status
+
+// Die Historie mit Alias lg anzeigen lassen
+$ git lg

GitCamp Repo erstellen

Auf GitCamp durch Klicken auf "Neues Repository" einen "Repository-Name" eintragen und durch Klicken auf "Repository Erstellen" bestätigen. +Danach kann man lokal auf der Konsole folgendes eintragen:

+
$ git init
+$ git checkout -b main
+$ git add .
+$ git commit -m "first commit"
+$ git remote add origin
+        https://<Instanz>.gitcamp-bw.de/<Orga>/<Repo>.git
+$ git push -u origin main
+

(Optional) - Zeitreise

Man sollte nur dann zu einem älteren Stand der Dateien zurückkehren, wenn das Arbeitsverzeichnis keine nicht committeten Änderungen beinhaltet. ("Sauberes Arbeitsverzeichnis")

tagebuch$ git status
 
@@ -676,19 +716,9 @@ Or undo this operation with: git switch -
 HEAD is now at 2f40bf7 Frühstück in Datei 'fruehstueck.txt' hinzugefügt

Neuer Status

tagebuch$ git status
 
 HEAD detached at 2f40bf7
-nothing to commit, working tree clean
-

Arbeitsaufträge

  1. Emitteln Sie mit git log einen Commit-Hash (die ersten 7 Ziffern) zu dem Sie zurückkehren möchten.

  2. Kehren Sie mit git checkout <Commit-Hash> zu diesem Commit zurück.

  3. Betrachten Sie mit git status den Zustand des Repositorys.

  4. Überprüfen Sie in Ihrem Arbeitsverzeichnis die Dateien und deren Inhalte.

  5. Betrachten Sie mit git log die Versionshistorie.

  6. (git log --all zeigt alle Commits. Probieren Sie das aus.)

Vergangenheit

Vergangenheit

Der Working-Tree

Neben dem HEAD gibt es nun einen weiteren Zeiger main, der auf den aktuellen Stand der Arbeit zeigt. Visualisieren Sie diesen sogenannten Detached Head mit gitk.

+nothing to commit, working tree clean

Arbeitsaufträge

  1. Emitteln Sie mit git log oder git lg einen Commit-Hash (die ersten 7 Ziffern) zu dem Sie zurückkehren möchten

  2. Kehren Sie mit git checkout <Commit-Hash> zu diesem Commit zurück

  3. Betrachten Sie mit git status den Zustand des Repositorys

  4. Überprüfen Sie in Ihrem Arbeitsverzeichnis die Dateien und deren Inhalte

  5. Betrachten Sie mit git log die Versionshistorie

  6. git log --all oder git lg zeigt alle Commits. Probieren Sie das aus

Vergangenheit

Vergangenheit

Der Working-Tree

Neben dem HEAD gibt es nun einen weiteren Zeiger main, der auf den aktuellen Stand der Arbeit zeigt. Visualisieren Sie diesen sogenannten Detached Head mit gitk.

tagebuch$ gitk

gitk-Visualisierung

Detached Head
-

Weitere Aufträge

  1. Bearbeiten Sie das Kapitel "4.3.4 Manipulation der Vergangenheit" im Skript.

  2. Bearbeiten Sie das Kapitel "4.3.2. Änderungen zwischen Commits ansehen" im Skript.

-

Zusammenfassung

Historie

Commit-Historie

Status Unstaged

Status1

Unstaged Close-Up

Status1 Close-Up

Status Staged

Status2

Staged Close-Up

Status2 Close-Up
-

Git Cheatsheet

// Credentials für 90 Minuten zwischenspeichern
-$ git config --global credential.helper
-    "cache --timeout=5400"
-
-// Alias 'git lg' für 'git log' mit schlichter Formatierung
-$ git config --global alias.lg "log --graph --pretty=format:
- '%Cred%h%Creset-%C(yellow)%d%Creset %s %Cgreen(%cr) %Creset'
- --abbrev-commit"