Programmieren 2 05 Versionsverwaltung mit Git Bachelor Medieninformatik Sommersemester 2015 Dipl.-Inform. Ilse Schmiedecke schmiedecke@beuth-hochschule.de 1
... gestern lief es noch!!! neues Feature eingebaut die ganze Nacht am Code entwickelt und plötzlich läuft gar nichts mehr! 2
Versionskontrolle 1: Zurück zum lauffähigen Stand Zurück zum lauffähigen Stand, aber wie? Dateien wurden verändert manche mehrfach manche gar nicht Unübersichtliche Lage! Tricks: Nichts ändern oder löschen, alte Version auskommentieren und ersetzen (interner Backup per Datei) Backup der letzten lauffähigen Version als Kopie (Backup per Version) Hilfsmittel mit Historie, z.b. Dropbox (externer Backup per Datei) Leider auch nicht übersichtlich... 3
Strukturiertes Backup im (lokalen) Repository commit Working Document (local) Repository Commit-Objekt: klein, binär, benannt nicht veränderbar, mit Kommentar, commit commit Working Tree (local) Repository 4 4
Strukturiertes Backup im lokalen Git-Repository add add commit Working Tree Stage (local) Repository Commit-Objekt ist immer ein ganzer WorkingTree Veränderte Objekte werden zunächst in der Stage zusammengefasst Commit kann eine sinnvolle Einheit von mehreren Dateien sein 5
Repository-Struktur: Kette von Commit-Objekten Kommentar Autor #-Tag BLOB (Working Tree) Commit-Objekt: - klein, binär, unveränderlich - benannt mit Hash-Tag HEAD master aktuelles Commit-Ziel Branch "master" a142b4 3879cd dbc45f 2376a3 zurück nach 3879cd: aktuellen Stand sichern: git commit alten Stand herstellen: git checkout 3879cd 6 6
Benannte Versionen: Tags HEAD master a142b4 3879cd dbc45f 2376a3 UE1 UE2 alte Version herstellen: git checkout 3879cd statt 3879cd lieber ein sinnvoller Name für die Version: tag definieren: git tag UE2 m 'Abgabe Uebung 2' tag definieren: git tag UE1 m 'Abgabe Uebung 1' 3879cd UE1 herstellen: git checkout UE1 7 7
Normaler Workflow CRUD auf dem Working Tree add add commit tag UE2 Zusammenfassung: Arbeiten wie gewohnt auf dem Working Tree "Staging" von geänderten Dateien mit add Das ganze aktuelle Verzeichnis: git add. Übertragen ins Repository mit commit ggf. Tag setzen mit tag Überschreiben des letzten commit mit commit --amend (Korrektur) 8
Versionskontrolle über mehrere Rechner Naheliegend: Repository auf einen Server verlagern Nicht mit Git! add, commit, checkout sind Kommandos auf einem lokalen Repository Weiteres Git-Repository (Kopie) auf einem Server "bare": ohne Working Tree "origin" lokale Repos mit Working Tree, Stage Git Client remote Repo "bare" Git Server 9
Versionskontrolle im Team Genauso: Zentrales Repo auf einem Server Lokale Repos bei den Team-Mitgliedern "origin" 10
Arbeiten mit Git Installieren: Git Client für Windows/MacOs Benutzen aus der Kommandozeile oder der Git Shell mit einem GUI-Client z.b. TortoiseGit (Windows) Sourcetree (MacOS) aus einer IDE heraus z.b. aus Eclipse mit dem EGit-Pugin 11
EINSCHUB: Die Kommandozeile Die Kommandozeile bietet direkten Zugang zum BS Ausgangspunkt ist das Dateisystem Aktuelles Arbeitsverzeichnis die darin liegenden Dateien kann man auflisten, erzeugen, löschen, umbenennen, ausführen Relativer Pfad ist der Punkt:. Übergeordnetes Verzeichnis ist Punkt -Punkt:.. um eine Datei uas einem anderen Verzeichnis auszuführen, muss man ihren Pfad mit angeben Navigation mit "cd <Pfad> " wechslelt man das Arbeitsverzeichnis z.b. "cd.." - ein Verzeichnis nach oben z.b. "cd dir2" oder "cd./dir2" in das Unter verzeichnis dir2 12 12
Windows-Kommandozeile Aufruf über "Zubehör" oder "cmd" im Suchfeld die wichtigsten Befehle: cd - Wechsel des Arbeitsverzeichnisses D: - Wechsel ins Laufwerk D dir - Inhalt des verzeichnisses auflisten md/mkdir - Verzeichnis erstellen del/rm - Datei löschen rd - Verzeichnis löschen datei - Ausführen der Datei "datei.exe" oder "datei.bat", sofern vorhanden echo xyz - xyz in die Konsole schreiben echo xyz > x.txt - xyz in die Datei x.txt schreiben (ggf. neu anlegen) 13 13
Systemvariablen Es gibt einige Variablen, mit denen man Pfade systemweit sichtbar machen kann: PATH Liste von Pfaden mit ; getrennt (ohne Leerzeichen) Dateien dieser Pfade sind überall bekannt, d.h. sie können von überall ohne Pfadangabe gerufen werden zur Git-Installation gehört, das Verzeichnis mit der git.exe dem Path hinzuzufügen CLASSPATH List von Pfaden, die in allen Java-Programmen bekannt sind JAVAHOME etc. Verzeichnis, in dem die (zentrale) Java-Installation liegt. 14 14
Die wichtigsten Git-Befehle Man braucht im Alltag nur eine Handvoll von Befehlen, init, clone, add, commit, tag, branch, fetch, push, pull, diff, merge, checkout,... Eine sehr gute, knappe Zusammenfassung bietet Atlassian: https://confluence.atlassian.com/display/stash/basic+git+commands 15 15
.gitignore Nicht alle Dateien im Working Tree müssen ins Repo z.b..class-dateien nicht oder das gesamte bin-verzeichnis.gitignore ist eine datei im Wurzelverzeichnis des WorkingTree enthält Dateien und Muster, die nicht ins Repo sollen z.b. *.class jeweils auf einer neuen Zeile.gitignore committen beim commit und bei push werden die angegebenen Dateien ignoriert. 16 16
Kleine Übung in der Konsole Volgella Git Tutorial 1. Wechsel in Wurzelverzeichnis 2. neues Verzeichnis "local" anlegen, Wechsel ins neue Verzeichnis 3. zwei neue Dateien erzeugen 4. neues Verzeichnis AB anlegen, darin eine neue Datei 5. mit git init zum Verzeichnis local ein Repo anlegen. 6. mit git add a oder git add. alles "stagen" 7. mit git commit m "initiales Commit" alles ins Repo schreiben 8. "Entferntes" Repo auf der lokalen Festplatte erzeugen: - mit cd local ins lokale Repo wechseln 9. - mit git clone bare...\remote.git eine remote-kopie anlegen (Warnung..) 10. Das lokale Repo mit dem entfernten verbinden: git remote add origin..\remote.git 11. lokal eine Datei ändern (echo...) 12. stage, commit 13. git push origin 17
... ctd. 13. Weiteres lokales Repo durch Clonen anlegen: 14. Verzeichnis local2 anlegen 15. mit cd dorthin wechseln 16. mit git clone../remote.git repo-kopie anlegen 17. in local2 Dateibaum ansehen 18. in local2 eine Datei ändern (z.b. löschen) 19. add, commit, push 20. in local pull 21. in local Dateibaum ansehen 22.... usw Workflow trainieren. 18 18
... nächstes Mal: Branching, Konfliktlösung Git aus Eclipse heraus benutzen 19 19