Kennt ihr das?

  • Einen Datei "Abschlussarbeit.odt"
  • Und noch eine Diskette "Abschlussarbeit Version 2.odt"
  • Dann "Abschlussarbeit FINAL.odt"
  • Dann "Abschlussarbeit FINAL - abgegeben.odt"

Versionsverwaltung Platz 1


Quelle: Stackoverflow-Survey 2022

Die Geschichte des Brotrezeptes

Versionierung mit Git

  • Alte Versionen können wiederhergestellt werden
  • Man kann zwischen Versionen wechseln
  • Versionen können mit anderen Entwicklern geteilt werden
  • Jede Änderung ist dokumentiert (Wer, Wann, Was)

Begriffe

  • Das zu versionierende Verzeichnis auf der Festplatte heißt Working Directory
  • Git speichert Versionsstände. Diese bezeichnet man als Commit
  • Als branch bezeichnet man einen Namen / Alias für einen Commit (ähnlich einer Verknüpfung)
  • HEAD ist ein automatischer Name, für den aktuellen Commit
  • main (früher master) ist ein üblicher Name für den neuesten offiziellen Commit (getestet, für Veröffentlichung, freigegeben)
  • Ein Repository enthält Commits, Branches, User, etc.

Commit

Im internen Speicher von GIT sieht ein Commit so aus:


tree 742a2d8d6e2f3ae6b5c74b369c3a174ee53e33d6
parent b67cfd77fcb2e3a8874d703bec1c53b56bc2f877
author Max Mustermann <max.mustermann@mail.invalid> 1655732881 +0200
committer Max Mustermann <max.mustermann@mail.invalid> 1655732881 +0200
Added text

In this commit I added some text to make the existing text longer

  • tree ist ein Link auf das gespeicherte Verzeichnis
  • parent ist ein Verweis auf den vorherigen commit (erzeugt "Perlenkette" von commits)
  • author ist der Verfasser des commits
  • committer ist der User, der den commit in git gespeichert hat
  • Der Freitext danach ist die commit message - eine Beschreibung dieses Versionsstands

Repository anlegen

git init
  • Erzeugt ein neues Repository
  • Fügt effektiv nur einen .git Ordner hinzu
  • Im .git Ordner stehen alle Informationen zum Repository
  • Wenn man den .git Ordner löscht ist es kein Git Repository mehr

Repository Status

git status

Zeigt an:

  • Änderungen
  • Dateien die noch nicht versioniert sind (Stichwort: .gitignore)
  • Momentaner Branch
  • Vorschläge für Aktionen

Commit

git commit -m "A message"

Erstellt einen commit und bewegt den aktuellen branch (und head).

  • tree = index
  • parent = bisheriger HEAD
  • author und committer werden standardmäßig aus Systemeinstellung übernommen
  • author- und commit-Zeitpunkte werden standardmäßig auf jetzt gesetzt

Aufgabe: git commit

  1. Erstelle ein Git-Repository (z.B. mit IntelliJ)
  2. Füge eine Java Datei (z.B. Aufgabe gestern zum Thema "Java") zu deinem Repository hinzu
  3. Mache einen commit deiner Datei
  4. Ändere die Datei
  5. Erstelle einen weiteren commit

Zusammenarbeit

  • Ich kann Dir einfach Commits für Dein Repo exportieren/schicken
  • So Zusammenarbeit in "verteiltem System" (quasi "Peer-to-Peer") möglich
  • In der Praxis wird meist ein Repo als "Zentrale" genutzt
  • (obwohl es technisch gesehen weiterhin ein normales Repo ist)
  • Wir nutzen den kostenlosen Online-Dienst "GitHub" als Zentrale

remotes

  • Referenz auf ein anderes git repository
  • local ist eine Kopie des remote repository
  • fetch aktualisiert die lokale Kopie (alle branches)
  • pull = fetch und aktualisiert aktuellen branch
  • push sendet Änderungen zum remote repo

Alle Git Repositories sind gleichwertig, aber wir definieren üblicherweise ein Repository als gemeinsamen Nenner.

clone

Eine Kopie vom remote Repository erstellen

git clone <uri>

pull

Holt Änderungen vom remote

git pull

push

git push

Sendet Änderungen Richtung remote

Github

  • hosted git version control system
  • meist genutzt für Open Source
  • von Microsoft 2018 für 7,5 Milliarden $ gekauft
  • Hilft beim Einstieg: https://lab.github.com/

Aufgabe: Github

  1. Lege dir einen GitHub-Account an
  2. Lege ein GitHub-Repository an
  3. Setze das remote repository als remote und push deine Änderungen
  4. Mache eine Änderung und committe und pushe sie
  5. Erstelle eine README.md Datei mit GitHub
  6. Aktualisiere dein lokales Repository mit den Änderungen von GitHub

Bonus: Füge deine Gruppe als Collaborators in deinem Testrepository hinzu

Weiteres Material

Video: Git Basics
Offizielle Git-Doku
Video: Anschauliche Detailerklärung

Quiz

Literatur

git cat-file -p HEAD