Ort: adesso AG (Große Elbstraße 36)
Zeit: 31.08.2017 19:00 Uhr
Kategorie: Versionierung
Beschreibung:
Versorgt mit Wraps und Fingerfood ging es in das Überlebenstraining mit Git - allerdings natürlich nicht ohne vorher ein paar Worte von Tobias über sich selbst und seine Firma rund um das Produkt "Tower" zu verlieren.
Vorbereitet hatte er einige lokale Git-Repositories mit ihren jeweils vorbereiteten Arbeitsständen, durch die Tobias einige typische Git-Szenarien durchspielen konnte.
für eine einzelne Datei:
git checkout HEAD <filename>
oder für den kompletten lokalen Arbeitsstand, um wieder komplett auf die Version des Heads zurückzukehren:
git reset --hard HEAD
Als Nächstes führte er die Möglichkeit vor, Commit-Kommentare zu ändern oder auch Dateien in einem bereits durchgeführten Commit nachzuliefern. Beides geschieht über die Option "--amend". Beim Nachliefern von Dateien besteht die Möglichkeit die Commit-Nachricht über den Schalter "--no-edit" beizubehalten ohne sie neu angeben zu müssen. Ein amend empfehle sich allerdings nicht mehr, falls man bereits auf das zentrale Repo gepusht hat, da sich der Commit-Hash ändert. Schließlich könnten sich Team-Mitglieder den vorherigen Stand bereits über einen Pull oder Fetch in ihr lokales Repository gezogen haben.
Zum Zurückziehen einer durch eine bestimmte Revision gemachten Änderung biete sich der Befehl "git revert" an. Hierdurch erstellt git eine neue Version indem die inversen Änderungen durchgeführt werden. Die inversen Änderungen entsprechen genau dem Gegenteil der Änderungen aus dem zurückzuziehenden Commits, wodurch genau diese Änderungen rückgängig gemacht werden. Somit ist dies in der Versionshistorie für jeden Entwickler zu erkennen. Git schlägt zusätzlich automatisch eine Commit-Nachricht vor, die den Commit-Hash der zurückgezogenen Revision beinhaltet.
Sollte man auf eine Version zurückspringen wollen, ohne dies in der Versionshistorie nachvollziehbar zu gestalten, ist ebenfalls ein "git reset" auf eine der vorigen Versionen möglich. Dennoch seien die Versionen nicht verloren. Diese sind noch 30 Tage im Reflog enthalten, über das alle Veränderungen des Head-Zeigers aufgenommen werden.
Sollte es geschehen sein, dass ein Commit durchgeführt wurde, obwohl man vorher einen neuen Branch anlegen wollte, um die Änderungen vorzunehmen, zeigte er auch hierfür einen Ausweg. Ist der Commit beispielsweise auf dem Master-Branch geschehen, legt man von diesem einen neuen Branch an und führt auf dem Master-Branch ein
git reset --hardder vorigen Revision durch. Auf diese Weise hat man den ursprünglich avisierten Zustand erreicht.
Sollte der Ziel-Branch bereits existieren löst man das Problem in ähnlicher Weise durch einen Cherry-Pick in den Zielbranch und ein reset der Revision aus dem Quell-Branch.
Falls man mal nicht wissen sollte, was man beim Push eigentlich auf das zentrale Repo lädt, bieten sich die folgenden zwei Befehle an: Folgender gibt an in welchem Branch man arbeitet und mit welchem Branch des zentralen Repos dieser verbunden ist
git branch -vv
Die endgültigen Unterschiede sind dann wie folgt sichtbar:
git log master --not origin-master
Sollte man umgekehrt wissen wollen, welche Änderungen ein pull auf dem lokalen Repo zur Folge hätte, gehe dies (nach einem vorherigen Fetch, da der Stand auf dem lokalen Repo verfügbar sein muss) nach dem selben Prinzip:
git log origin-master --not master
Sobald Dateien unter die Obhut von git geraten sind, werden sie durch git getrackt. Daher genügt ein alleiniges nachträgliches einfügen einer solchen Datei in das .gitignore nicht. Abhilfe schafft die folgende Befehlsfolge vor dem Commit
git rm -cached .
git add .
Sein Team von fournova stellt eine Lern-Seite mit verschiedenen Unterlagen zur Verfügung, die den Einstieg und die Vertiefung in git erleichtern sollen. Dort befindet sich ein eBook, Video-Tutorials und Cheat-Sheets
.Die Diskussionsrunde nach der Präsentation zielte, neben git, vorrangig auf die Arbeitsweise des Teams hinter Tower ab. Wesentliche Kernpunkte dieser Diskussion waren das verteilte Arbeiten der Team-Mitglieder, das Schaffen einer Kultur und das Leben von Werten, wie bspw. dem Wert "Vertrauen".