Verteilte Versionskontrolle mit GIT
17.04.2012 - Dortmund Ansgar Brauner - GreenPocket GmbH - Köln
1
über mich • 32 Jahre alt • Softwareentwickler bei der Firma GreenPocket in Köln • Java EE Entwickler und Rails Begeisterter. Linux und Mac OS auf Server und Laptop. • Twitter: @a_brauner EMail:
[email protected]
2
greenpocket • GreenPocket bietet Energieversorgern innovative Software-Lösungen für Smart Metering und Smart Home an, mit denen Haushalts- und Gewerbekunden ihre Energieeffizienz nachhaltig verbessern können. • Unsere Kunden sind Energieversorger jeglicher Größenordnung – vom kleinen und mittleren Stadtwerk bis zum großen Energiekonzern. • Ziel ist es, die Energieeffizienz zu fördern und den CO2-Ausstoß der Haushalte und Gewerbe in Deutschland langfristig zu reduzieren. • GreenPocket hat sich deshalb zum Ziel gesetzt, die Vorteile von Smart Metering für den Verbraucher sichtbar zu machen. • Dazu setzen wir auf innovative Software-Lösungen, die es Energieversorgern ermöglichen, Intelligenz in die digitale Datenmenge zu bringen und die entstehenden Mehrwerte verbraucherorientiert zu visualisieren.
3
GIT - Eine kleine Einführung •
Verteiltes Versionskontrollsystem
•
Aktionen mit dem Repository finden in der Regel lokal statt
•
Abgleich mit verschiedenen Remote Repositories kann auf verschiedenen Wegen stattfinden.
•
Jede Kopie ist ein vollständiges Repository
•
Backups durch kopieren der Dateien im .git Verzeichnis
•
Lokale Aktionen sind schnell
•
Branchen und Mergen ist günstig, einfach und schnell
•
Nahezu jeder beliebige Workflow ist abbildbar
4
Die wichtigsten Befehle • clone
• merge
• init
• grep
• pull
• log
• push
• rm
• status
• show
• add
• stash
• commit
• remote
• diff
• rebase
• fetch
• reset
• branch
• tag
5
Hilfe • Sehr gute und ausführliche Manpages • git help liefert einer Übersicht der wichtigsten Befehle • git -h liefert eine kurze Hilfe • git help || git help Öffnet die jeweilige Manpage
6
Initialisieren eines Repositories • Neues Repository git init • Bestehendes Repository git clone • Mögliche URLs Lokales Verzeichnis file://, ssh://, git://, ftp://
7
Der Index • GIT führt etwas ein was wahlweise „Index“ oder „Stage“ genannt wird • Der Index dient dazu den nächsten Commit vorzubereiten • Es können Teile von Dateien auf den Index gelegt werden falls nur Teile im nächsten Commit berücksichtigt werden sollen • Elemente können auch wieder vom Index entfernt werden Die Änderung bleibt bestehen ist dann aber nicht Teil des nächsten Commits • git commit -a fügt automatisch alle Änderungen zum Index hinzu bevor der Commit ausgeführt wird.
8
Arbeiten mit dem Index • Dateien werden mit „git add ...“ zum Index hinzugefügt • „git reset“ dient dazu Elemente vom Index zu entfernen
9
git commit • Elemente vom Index werden in dem lokalen Repository festgeschrieben • Die HEAD-Referenz wird auf diesen aktuellsten Commit verlinkt • „git commit --amend“ ändert den letzten Commit Nützlich bei vergessenen Dateien, unzureichenden Commit-Nachrichten !!! Nur bei nicht veröffentlichten Commits !!!
10
git status • Zeigt Informationen zu den Dateien im aktuellen Verzeichnis an • Datei neu (nicht versioniert), • Datei verändert, • Datei auf dem Index • Eine Datei die sich bereits auf dem Index befand und erneut verändert wurde, muss dem Index erneut hinzugefügt werden.
11
git diff • Zeigt Änderungen zwischen angegebene Versionen an • „git diff“ zwischen Arbeitskopie und Index • „git diff --cached“ zwischen Index und dem letzten Commit • „git diff HEAD“ zwischen Arbeitskopie und dem letzten Commit • „git diff ..“ zwischen zwei spezifischen Commits • „git diff zwischen dem aktuellen und angegebene Branch
12
git log • „git log“ zeigt das vollständige Commit-Log. • „git log -10“ die letzten 10 Commit-Messages • „git log --author=‘john doe‘“ alle Commit-Messages von john doe
13
git remote • Stellt Verbindung zu einem Remote Repository her • Es kann beliebig viele „Remotes“ geben • Jedes Remote stellt ein eigenes vollständiges Repository dar • Es könne Branches eines Remotes ausgecheckt werden • Informationen über Änderungen können aus verschiedenen Remotes bezogen werden • Es kann in der Regel nicht in Remotes gepushed werden da die dortigen, lokalen Änderungen nicht bekannt sind • Lösung: Den Remote-Eigentümer bitten zu pullen • So genannte „bare“ Repositories können als zentrales Repository dienen in die dann auch gepushed werden darf.
14
Arbeiten mit Remotes • „git remote add “ fügt ein neues Remote Repository hinzu • „git remote show“ zeigt alle Remote-Namen • „git remote show “ zeigt Informationen zu dem jeweiligen Remote
15
git branch • Der default Branch heißt master • „git branch “ erzeugt einen neuen lokalen Branch • „git checkout “ wechselt in den lokalen Branch • „git checkout -b “ erzeugt den lokalen Branch und wechselt direkt dorthin • Die HEAD Referenz wird entsprechend angepasst • Branches können gelöscht werden, Vorsicht bei veröffentlichten Branches • Es wird zwischen bereits gemergten und nicht gemergten Branches unterschieden
16
git branch • „git branch“ zeigt die lokal vorhandenen Branches • „git branch -r“ zeigt die Branches in allen Remote Repositories • „git branch -a“ zeigt alle Branches an • „git branch --no-merged“ zeigt noch nicht zurückgeführte Branches an
17
URLs • Git Documentation http://git-scm.com/documentation • Git from bottom up http://ftp.newartisans.com/pub/git.from.bottom.up.pdf • Pro Git http://progit.org • Git Ready http://www.gitready.com • Verteilte Versionskontrolle mit Git http://bit.ly/bt1yEN • Git for Computer Scientists http://eagain.net/articles/git-for-computer-scientists/
18
Fragen?
19