1. Termin
Der erste Termin beschäftigte sich mit den Basics von Git und GitHub. Da mir diese grundlegenden Basics weitestgehend bekannt waren werde ich diese hier nicht noch einmal explizit aufführen. Dieser Eintrag wird sich daher eher mit den Dingen beschäftigen, die mir noch nicht bekannt waren und diese ggf. weiter vertiefen. Dies betrifft vor allem die standard git befehle, die jederzeit mit git --help über die command line eingesehen werden.
Generelle Funktionsweise von Git
Initialisiert man einen Ordner durch den Befehl git init als Git Repository wird in diesem Ordner ein Unterodner mit dem Namen .git angelegt. Git identifiziert einzelne Zustände des Rpository über einen SHA1-Hash, der übern den Content gebildet wird und (in der Regel) eindeutig ist. Im .git Ordner sind alle Versionen des Rpositories gespeichert und über den SHA1-Hash identifizierbar.
Objekte in git unterteilen sich in die Folgenden:
- blob - ein file
- commit - Zeigt auf einen einzelnen tree
- tree
- tag - Markiert einen Commit als einen besonderen (i.d.R. ein release)
Der Typ eines Objects kann mittels git cat-file -t eingesehen werden. Um den Inhalt des Objects zu sehen, wird git cat-file -p verwendet.
Stashing
Mein einziger Kontakt mit Stashing war bisher ein Fix, um schon geaddte Dateien wieder aus dem Staging-Bereich zu entfernen. Die Lösung hier war es, diese änderungen in einen stash zu schieben und diesen anschließend zu löschen.
Übersetzt man “stash” mit “Lager” bekommt man eine recht genaue Vorstellung von der Funktionsweise des Commands. git stash dient also dafür, aktuelle änderungen an einem anderen Ort zu speichern. Die Dokumentation führt ein gutes Beispiel auf:
Often, when you’ve been working on part of your project, things are in a messy state and you want to switch branches for a bit to work on something else. The problem is, you don’t want to do a commit of half-done work just so you can get back to this point later.
Die Anwendung von git stash ist recht simpel: solange git status nicht committete oder geaddete changes ausgibt ruft man git stash auf und die änderungen werden in einen neuen Stash geschreiben. Git nummeriert die stashes dabei (angefangen bei 0) automatisch durch, wobei der neuste stash immer an der ersten Stelle (0) liegt.
Mit git stash list lassen sich die einzelnen stashes anzeigen, mit git stash apply [stash@x] lassen sich stashes wieder in das working directory einfügen. Werden Stashes nicht mehr benötigt können diese mit git stash drop wieder gelöscht werden.
Merging
Normales Merging vie git merge war mir bereits vor dem Termin ein Begriff, neu war für mich aber die option --squash. Mit dieser Option werden die Commits des zu mergenden bracnhes nicht mit in die hsitory geschrfeiben, sondern als ein einzuger Commit auf den Head geschrieben.